将combobox selectedItem传递给另一个表单构造函数返回null .why?

时间:2012-08-16 05:03:14

标签: c# winforms

我试图将一个表单的comboboxselectedItem称为另一个表单构造函数。这样我就可以为它分配一些变量并将其用于其他目的。

包含组合框值的表单是模式表单:

    public Mode()
    {
        InitializeComponent();
    }

    private void Mode_Load(object sender, EventArgs e)
    {

        DataSet ds = new DataSet();
        comboBox1.Focus();
        String query = "select [test_no],[test_name] from [Test]";
        ds = db.ExecuteDataSet(query);
        comboBox1.DisplayMember = "test_name";
        comboBox1.ValueMember = "test_no";
        comboBox1.DataSource = ds.Tables["tablename"];
        panel3.Controls.Add(comboBox1);
        panel3.Controls.Add(Runbutton);                 
    }

      private void Runbutton_Click_2(object sender, EventArgs e)
     {
         label3.Enabled = true;
         val = Convert.ToString(comboBox1.Text);
         Test test = new Test(val);
         Test test1 = new Test();
         test1.Activate();
         test1.Focus();
         this.Hide();
         test1.ShowDialog();  
     }

      private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
      {
          val = Convert.ToString(comboBox1.SelectedItem);

      }

测试表格:代码

 string parentform;

    public Test()
    {
        InitializeComponent();
        RunFirst_Settings();
        UserLogin login = new UserLogin();
        login.Hide();
        login.Visible = false;
    }

     public Test(string Mode)
     {
         parentform = Mode;
     }

    private void Startbutton_Click(object sender, EventArgs e)
    {

        stopwatch.Start();
        timer1.Start();
        ts=new ThreadStart(ProcessStarted);
        th=new Thread(ts);                 
        th.Start();

    }

     private void ProcessStarted()
    {
        if (parentform != null)
        {
            // Here every time it returns a null value. Before it was 
            // showing the exact selectedItem of combobox in Mode form:
            MMTest(parentform);

        }


        else
        {
             //other code to be done

        }
  }

现在我如何获得组合框的确切selectedItem?有什么建议吗? 如果我仅在Mode形式的Runbutton_Click_2()中调用Test(字符串模式)构造函数,它将显示空白表单,而不是实际的测试表单。

我的错误在哪里?如何纠正它以获得所需的结果。

2 个答案:

答案 0 :(得分:0)

在click事件处理程序中,您在不同对象上调用参数化构造函数并显示另一个对象(test和test1)的表单。因此,test1实例从未真正收到所选的项目文本。

编辑:

  1. Test test1 = new Test();替换为Test test1 = new Test(val);
  2. 在参数化构造函数中,添加:this()以调用默认构造函数。

答案 1 :(得分:0)

至于你只使用参数化构造函数(因为你需要那个参数)删除你的第一个构造函数Test()或将其设为私有,以确保你不会偶尔调用它。如果你要离开它 - 而不是使用丹麦语解决方案(: this()),如果没有,那么:

public Test(string Mode)
{
   InitializeComponent();
   RunFirst_Settings();
   UserLogin login = new UserLogin();
   login.Hide();
   login.Visible = false;

   parentform = Mode;
}