请问在类中实例化窗口为什么会出这样的错?

时间:2022-09-27 09:22:43
如题,
、“例如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的函数,这样相互交错该怎么解决矛盾呢?其实把所有程序写在窗口里就没这个问题了,但是我想用一些类来把函数分类,这样更便于后期程序的改动.请问高手如何解决的?

#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函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
        }

#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函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了 
        }

#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();
}

#8


-_-!!! 刚才还没看到 6 L, 郁闷! 被抢了...

#9


该回复于2008-03-19 13:36:48被版主删除

#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

#11


好快的速度.

#12


你们在哪看的这些操作哟,我砸没看倒过呢,看来还需要经验呀!

#1


Form1的构造函数贴出来看看

#2


-_-!!! 快将代码贴出, 明显的是逻辑错误..

#3


应该是Class2与Form1相互交错了

#4


我已经检查到错误了,是的,相互交错了,我在窗口程序中实例化了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函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了
        }

#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函数是非静态的,必须实例化,这样就产生了主窗口实例化类,类中实例窗口的交错了 
        }

#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();
}

#8


-_-!!! 刚才还没看到 6 L, 郁闷! 被抢了...

#9


该回复于2008-03-19 13:36:48被版主删除

#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

#11


好快的速度.

#12


你们在哪看的这些操作哟,我砸没看倒过呢,看来还需要经验呀!