将类中的值传递回形式

时间:2014-09-29 05:41:50

标签: c# forms class

所以我做了tic tac toe。在主文件(Form1.cs)中我想只有button1_click,button2_click事件,我将从Class1调用函数。我的问题是我有循环所以debuger返回错误SystemStackOverflowException unhandelded。

Form1.cs中:

    Form1 frm1;
    Class1 cl;
    public Form1()
    {
        cl = new Class1();
        frm1 = this;
        InitializeComponent();
    }



    private void button5_Click(object sender, EventArgs e)  //gumb za tip1 igro
    {
       cl.button1funkcija(frm1);
    }

的Class1.cs

Form1 form = new Form1(); //its needed so i can use it in my own made functions (prehod_stan2())
    public void button1funkcija (Form1 form)
    {
        if (form.numericUpDown2.Value != 0) 
        {
            form.label10.Text = "Preostale igre:" + form.numericUpDown2.Value;
            tip = 3;
            st_iger = form.numericUpDown2.Value;
            prehod_stran2();
            form.errorProvider6.Clear();
            stanje();
        }
        else //če je število iger enako 0, prikaži napako
        {
            form.errorProvider5.Clear();
            form.errorProvider6.SetError(form.numericUpDown2, "Število more biti večje od 0");
        }
    }

    public void prehod_stran2()  
    {
        if (form.textBox1.Text == "")
        {
            form.errorProvider1.SetError(form.textBox1, "Polje mora biti izpolnjeno");
            if (form.textBox2.Text == "")
                form.errorProvider2.SetError(form.textBox2, "Polje mora biti izpolnjeno");
        }
    }

1 个答案:

答案 0 :(得分:1)

Form1 form = new Form1();行是您可能出错的地方。您不需要表单的新实例 - 您想要使用现有实例。您可以将表单实例传递给Class1构造函数。

当您致电代码cl = new Class1();时,您需要将其更改为cl = new Class1(this);,以便将对表单的引用传递给Class1。当然,您需要在Class1中添加正确的构造函数方法。然后,传递的引用将替换new Form1()中的Class1代码。