2013-05-14 105 views
0

我有主表单和FORM 2(这是一种模态表单)。当退出时,Form2值返回0

当我输入FORM 2时,会出现一个组合框,所选值将存储在一个类中。从那里,它工作正常,因为messagebox确认存储的值。

但是,当我退出FORM 2和回主要形式中的文本框以显示该值,该值现在返回0

FORM 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; 
    } 
} 

主要形式(显示规格值)

private void txbxSpec_Input_TextChanged(object sender, EventArgs e) 
{ 
    BSIT bsit = new BSIT(); 

    if (!(bsit.getSpec() == "")) 
    { 
     txbxSpec_Input.Text = bsit.getSpec(); 
    } 
} 

回答

4

你有两个独立的BSIT类实例。您需要将第一个实例传递给FORM 2的实例或使BSIT类为静态。

至少我认为这是由于我在您发布的代码中可以看到的原因。我没有看到你在哪里实例化包含你的事件的表单。

你的“新”在btnOK_BS__Spec_Click活动荷兰国际集团起来BSIT一个实例和值保存到它,但它一旦超出范围的情况下结束,因此您失去自己的价值。然后,您试图从BSIT的第一个实例中获取用户的价值。

0

您在主要形式BSIT,然后把它传递到窗体2于是两个形式访问sinle实例,财产以后这样你应该发送初始化新instace:

这里我定义了一个构造函数形式的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(); 

,你应该有somthin摹像你点击按钮的事件处理程序THID: (你可以看到我改变“结果”,我们之前设置它的构造函数)

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