public int [] grad_class = new int [2];
用于保存学校班级选择的内容。 (类列表是COMBO BOX) 之后,我打开另一个新表格来编辑该班级学生的信息。 我像这样使用Switch:
switch(grad_class)
{
case "11": something to do..., break;
case "12": something to do..., break;
}
但是我的问题: 我在形式No.1中定义“grad_class”。所以当我想要使用时,我必须这样做:
form1 f1 = new form1();
f1.grade_class;
并且在表单2中我调用此代码。 在表格No.1我打电话:
form2 f2 = new form2();
OCCUR STACK OVERFLOW EXCEPTION !!!
答案 0 :(得分:2)
你说:
form1 f1 = new form1();
f1.grade_class;
并且在表单2中我调用此代码。在表格No.1我打电话:
form2 f2 = new form2();
那么,你的问题就在那里。您在form1
中呼叫form2.ctor
并在form2
呼叫form1.ctor
。所以你的代码看起来像这样:
public form1() {
var f2 = new form2();
}
public form2() {
var f1 = new form1();
}
当然,这会导致堆栈溢出。这些是异常递归函数。你没有返回条件,所以你耗尽了你的堆栈空间。很简单,发生的事情是机器必须在方法完成时存储关于下一步的状态。它通常将此信息存储在称为堆栈的空间中。虽然堆栈是有界限的,所以如果你通过反复调用方法将太多的“这就是下一步”阻塞到堆栈上,你将耗尽这个堆栈空间并点击臭名昭着的堆栈溢出异常。
编辑:你说:
namespace TeacherBook {
public partial class ChooseGrade : Form {
public int[] grad_class=new int[2]; //int array for grade & class (first for Grade,second for class)
EditStudent StdForm = new EditStudent();
}
namespace TeacherBook {
public partial class EditStudent : Form {
ChooseGrade ChGrade = new ChooseGrade(); // define form
}
}
实际上是我怀疑的。您在ChooseGrade
中有一个字段初始值设定项,用于实例化EditStudent
的新实例。但EditStudent
有一个字段初始值设定项,用于实例化ChooseGrade
的新实例。因此,当您实例化ChooseGrade
的新实例时,这会导致调用EditStudent
的构造函数,这会导致调用ChooseGrade
的构造函数,从而导致{{1}的构造函数要调用它,然后继续它,直到你溢出堆栈。