0

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

班级

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

3 回答 3

4

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

至少我认为这是原因,从我在您发布的代码中可以看到。我看不到您在哪里实例化包含您的btnOK_BS__Spec_Click事件的表单。

您正在“新建”事件BSIT中的一个实例btnOK_BS__Spec_Click并将您的价值保存到其中,但是一旦事件结束,它就会超出范围,因此您失去了价值。然后你试图从第一个实例中获取用户的价值BSIT

于 2013-05-14T01:54:50.677 回答
0

嗨,您可以参考以下链接..

将值从一种形式传递到另一种形式

或者

http://csharpprobsandsoln.blogspot.in/2013/04/passing-value-from-one-form-to-other.html

于 2013-05-14T05:48:04.637 回答
0

您应该以 Main 形式发送您的 BSIT 的 init new instace,然后将其传递给 Form2,以便两种形式访问单个实例,如下所示:

在这里我定义了一个构造函数表单 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() == "");
}
于 2013-05-14T05:19:10.913 回答