退出时,Form2 Value返回0

时间:2013-05-14 01:46:28

标签: c# winforms

我有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();
    }
}

3 个答案:

答案 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)