我有MAIN FORM和FORM 2(这是一种模态形式)。
当我输入FORM 2时,有一个组合框,所选的值将存储在一个类中。从那里,它工作正常,因为消息框确认该值已存储。
但是当我退出FORM 2并返回MAIN FORM以在文本框中显示该值时,该值现在返回0.
表格2:
private void btnOK_BS__Spec_Click(object sender, EventArgs e)
{
BSIT bsit = new BSIT();
string spec = cboIT_Spec.Text;
do
{
if (spec == "Animation and Game Development" || spec == "Digital Arts")
{
bsit.setSpec(spec);
MessageBox.Show("You chose " + bsit.getSpec() + ".", "Specialization",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Please select your Specialization.");
}
}
while (bsit.getSpec() == "");
}
CLASS
public class BSIT : Student
{
public BSIT()
{
spec = "";
}
private string spec;
public void setSpec(string spec)
{
if (spec == "Animation and Game Development" || spec == "Digital Arts")
{
this.spec = spec;
}
}
public string getSpec()
{
return spec;
}
}
MAIN FORM(显示规格的值)
private void txbxSpec_Input_TextChanged(object sender, EventArgs e)
{
BSIT bsit = new BSIT();
if (!(bsit.getSpec() == ""))
{
txbxSpec_Input.Text = bsit.getSpec();
}
}
答案 0 :(得分:4)
您的BSIT
课程有两个独立的实例。您需要将第一个实例传递给FORM 2的实例或使BSIT类静态。
至少我认为这是原因,从我在你发布的代码中看到的。我没有看到您在哪里实例化包含btnOK_BS__Spec_Click
事件的表单。
您在BSIT
事件中“{新”了btnOK_BS__Spec_Click
个实例并保存了您的价值,但是一旦事件结束它就会超出范围,所以你会失去你的值。然后,您尝试从BSIT
的第一个实例获取用户的值。
答案 1 :(得分:0)
你应该在主窗体中发送你的BSIT初始实例,然后将它传递给Form2,这样两个表单访问一个sinle实例,如下所示:
这里我定义一个构造函数表单Form2,以给BSIT实例表单形式为主
Public class Form2
{
BSIT result;
public Form2(BSIT bsit)
{
result = bist;
}
...
}
现在当你在mainform中初始化form2时,你应该有这样的事情:
BIST resultFromForm2 = new BIST();
Form2 frm = new Form2(resultFromForm2);
frm.showDialog();
你应该像按钮点击事件处理程序一样: (你可以看到我改变了之前在构造函数中设置它的“结果”)
private void btnOK_BS__Spec_Click(object sender, EventArgs e)
{
string spec = cboIT_Spec.Text;
do
{
if (spec == "Animation and Game Development" || spec == "Digital Arts")
{
result.setSpec(spec);
MessageBox.Show("You chose " + result.getSpec() + ".", "Specialization",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Please select your Specialization.");
}
}
while (result.getSpec() == "");
}
答案 2 :(得分:0)