、“例如Form所在窗体是Form1,而我新加了一个class2,在class2中做Form1.Button1.text = "change";这样的操作。”
首先我得把窗体的控件属性改为PUBLIC,然后在CLASS2里实列化窗口Form1 FRM = new Form1();
但是在实例化时,运行报错
未处理的“System.*Exception”类型的异常出现
排错提示,确保你没有无限递归和循环
请问该如何正确的在另外的类文件中实例化窗口.
12 个解决方案
#1
Form1的构造函数贴出来看看
#2
-_-!!! 快将代码贴出, 明显的是逻辑错误..
#3
应该是Class2与Form1相互交错了
#4
我已经检查到错误了,是的,相互交错了,我在窗口程序中实例化了CLASS2, 而在CLASS2中又实例化了窗口.
但是我主窗口的按钮程序要调用CLASS2里的函数,而且不能是静态函数(这些函数有对窗口里的控件操作),所以也必须得实例化CLASS2再调CLASS2的函数,这样相互交错该怎么解决矛盾呢?其实把所有程序写在窗口里就没这个问题了,但是我想用一些类来把函数分类,这样更便于后期程序的改动.请问高手如何解决的?
但是我主窗口的按钮程序要调用CLASS2里的函数,而且不能是静态函数(这些函数有对窗口里的控件操作),所以也必须得实例化CLASS2再调CLASS2的函数,这样相互交错该怎么解决矛盾呢?其实把所有程序写在窗口里就没这个问题了,但是我想用一些类来把函数分类,这样更便于后期程序的改动.请问高手如何解决的?
#5
CLASS2里的代码:
public class CLASS2
{
Form1 FRM = new Form1();
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2();
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
public class CLASS2
{
Form1 FRM = new Form1();
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2();
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
#6
public class CLASS2
{
Form1 FRM = null
// 将Form1的对象直接传进来,不用在构建Form1的对象
public CLASS2(Form frm)
{
this.FRM = frm;
}
public static bool[] MKSelect = new bool[6];
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
................
}
}
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
{
Form1 FRM = null
// 将Form1的对象直接传进来,不用在构建Form1的对象
public CLASS2(Form frm)
{
this.FRM = frm;
}
public static bool[] MKSelect = new bool[6];
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
................
}
}
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
#7
尝试下:
public class CLASS2
{
Form1 FRM;
public CLASS2(Form1 owner)
{
this.FRM = owner;
}
...
}
主窗体:
private void button2_Click(object sender, EventArgs e)
{
new CLASS2(this).select();
}
public class CLASS2
{
Form1 FRM;
public CLASS2(Form1 owner)
{
this.FRM = owner;
}
...
}
主窗体:
private void button2_Click(object sender, EventArgs e)
{
new CLASS2(this).select();
}
#8
-_-!!! 刚才还没看到
6
L, 郁闷! 被抢了...
#9
#10
public class CLASS2
{
Form1 FRM = null;
public CLASS2(Fomr 1 f)
{
FRM=f;
}
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet
{
Form1 FRM = null;
public CLASS2(Fomr 1 f)
{
FRM=f;
}
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet
#11
好快的速度.
#12
你们在哪看的这些操作哟,我砸没看倒过呢,看来还需要经验呀!
#1
Form1的构造函数贴出来看看
#2
-_-!!! 快将代码贴出, 明显的是逻辑错误..
#3
应该是Class2与Form1相互交错了
#4
我已经检查到错误了,是的,相互交错了,我在窗口程序中实例化了CLASS2, 而在CLASS2中又实例化了窗口.
但是我主窗口的按钮程序要调用CLASS2里的函数,而且不能是静态函数(这些函数有对窗口里的控件操作),所以也必须得实例化CLASS2再调CLASS2的函数,这样相互交错该怎么解决矛盾呢?其实把所有程序写在窗口里就没这个问题了,但是我想用一些类来把函数分类,这样更便于后期程序的改动.请问高手如何解决的?
但是我主窗口的按钮程序要调用CLASS2里的函数,而且不能是静态函数(这些函数有对窗口里的控件操作),所以也必须得实例化CLASS2再调CLASS2的函数,这样相互交错该怎么解决矛盾呢?其实把所有程序写在窗口里就没这个问题了,但是我想用一些类来把函数分类,这样更便于后期程序的改动.请问高手如何解决的?
#5
CLASS2里的代码:
public class CLASS2
{
Form1 FRM = new Form1();
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2();
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
public class CLASS2
{
Form1 FRM = new Form1();
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2();
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
#6
public class CLASS2
{
Form1 FRM = null
// 将Form1的对象直接传进来,不用在构建Form1的对象
public CLASS2(Form frm)
{
this.FRM = frm;
}
public static bool[] MKSelect = new bool[6];
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
................
}
}
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
{
Form1 FRM = null
// 将Form1的对象直接传进来,不用在构建Form1的对象
public CLASS2(Form frm)
{
this.FRM = frm;
}
public static bool[] MKSelect = new bool[6];
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
................
}
}
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
}
#7
尝试下:
public class CLASS2
{
Form1 FRM;
public CLASS2(Form1 owner)
{
this.FRM = owner;
}
...
}
主窗体:
private void button2_Click(object sender, EventArgs e)
{
new CLASS2(this).select();
}
public class CLASS2
{
Form1 FRM;
public CLASS2(Form1 owner)
{
this.FRM = owner;
}
...
}
主窗体:
private void button2_Click(object sender, EventArgs e)
{
new CLASS2(this).select();
}
#8
-_-!!! 刚才还没看到
6
L, 郁闷! 被抢了...
#9
#10
public class CLASS2
{
Form1 FRM = null;
public CLASS2(Fomr 1 f)
{
FRM=f;
}
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet
{
Form1 FRM = null;
public CLASS2(Fomr 1 f)
{
FRM=f;
}
public static bool[] MKSelect = new bool[6];
public void select()//这个方法只能是非静态的,因为有对非静态量的操作FRM.checkBox_01.
{
if (FRM.checkBox_01.Checked == true)
{
MKSelect[0] = true;
}
else
{
MKSelect[0] = false;
}
if (FRM.checkBox_02.Checked == true)
{
MKSelect[1] = true;
}
else
{
MKSelect[1] = false;
}
if (FRM.checkBox_03.Checked == true)
{
MKSelect[2] = true;
}
else
{
MKSelect[2] = false;
}
if (FRM.checkBox_04.Checked == true)
{
MKSelect[3] = true;
}
else
{
MKSelect[3] = false;
}
if (FRM.checkBox_05.Checked == true)
{
MKSelect[4] = true;
}
else
{
MKSelect[4] = false;
}
if (FRM.checkBox_06.Checked == true)
{
MKSelect[5] = true;
}
else
{
MKSelect[5] = false;
}
}
}
}
然后在主窗口里,
private void button2_Click(object sender, EventArgs e)
{
CLASS2 CLA = new CLASS2(this);
CLA.selecet();//selcet
#11
好快的速度.
#12
你们在哪看的这些操作哟,我砸没看倒过呢,看来还需要经验呀!