1

あるフォームのコンボボックス選択項目を別のフォーム コンストラクターに呼び出そうとしています。変数を割り当てて、他の目的に使用できるようにします。

コンボボックス値を含むフォームはモード フォームです。

    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(string Mode) コンストラクターを呼び出すと、実際のテスト フォームではなく、空白のフォームが表示されます。

私の間違いはどこですか?必要な結果を得るにはどうすれば修正できますか。

4

2 に答える 2

0

クリック イベント ハンドラーでは、別のオブジェクトでパラメーター化されたコンストラクターを呼び出し、別のオブジェクト (test と test1) からフォームを表示しています。そのため、test1 インスタンスは、選択された項目テキストを実際には受け取りませんでした。

編集:

  1. Test test1 = new Test();で置き換えTest test1 = new Test(val);ます。
  2. :this()パラメーター化されたコンストラクターで、デフォルトのコンストラクターも呼び出すように追加します。
于 2012-08-16T05:35:11.617 に答える
0

パラメーター化されたコンストラクターのみを使用する限り (そのパラメーターが必要なため)、最初のコンストラクターを削除するTest()か、プライベートにして、時々呼び出さないようにします。そのままにしておく場合 - デンマークのソリューション ( : this()) を使用するよりも、そうでない場合:

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

   parentform = Mode;
}
于 2012-08-16T06:15:59.730 に答える