所以我做了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");
}
}
答案 0 :(得分:1)
Form1 form = new Form1();
行是您可能出错的地方。您不需要表单的新实例 - 您想要使用现有实例。您可以将表单实例传递给Class1
构造函数。
当您致电代码cl = new Class1();
时,您需要将其更改为cl = new Class1(this);
,以便将对表单的引用传递给Class1
。当然,您需要在Class1
中添加正确的构造函数方法。然后,传递的引用将替换new Form1()
中的Class1
代码。