2016-08-17 7 views
-2

これを解決するために多くの時間を費やしています。 私は3つのコンボボックスを持っています。フォームがロードされ、残りが非アクティブなときに最初にアクティブにしようとしています。 最初のcmbで値(ダブルタイプ)を選択すると、秒がアクティブになり、最初に非アクティブになり、値が2番目に選択され、最初は非アクティブになり、2番目は非アクティブになり、3番目のコンボボックスもう一度選択が開始されるまで休止状態になります。3つの選択関連のコンボボックスを通過する方法無効な状態を有効にする

これは、Windows上にあるが、私がループしてみましたが、すぐに私は、これが

:-)十分に明確であると思います :-(非常に複雑になっ

を形成してあなたは、イベントを使用する必要が

+0

これはWinFormsアプリケーションですか? – itsme86

+0

質問にあなたのコードを追加してください。 – Kinetic

+0

はいWindowsフォーム。 – Thomas

答えて

0

ありがとう、SelectionChangeCommittedのように。イベントハンドラは、特定の条件が満たされたときに自動的にメソッドを呼び出すために使用されるため、ループでポーリングすることなく特定の条件付きアクションを実行できます。ここでは、あなたが探しているものを行うべきである例がありますが、ユーザーフレンドリーではないユーザーにとってはそうです。あなただけのコンボボックスの初期状態を設定する必要が続いて

// List the combo boxes in the order you want them to enable. 
ComboBox[] _boxes = { comboBox1, comboBox2, comboBox3 }; 

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int index = Array.IndexOf(_boxes, (ComboBox)sender); 

    // Disable the combo box that just got its value selected. 
    _boxes[index].Enabled = false; 

    // If it's not the last combo box in the array, enable the next one. 
    if(index < _boxes.Length - 1) 
     _boxes[index + 1].Enabled = true; 
} 

public partial class ExampleForm : Form 
{ 
    public ExampleForm() 
    { 
     InitializeComponent(); 

     comboBox1.Enabled = true; 
     comboBox2.Enabled = false; 
     comboBox3.Enabled = false; 

     comboBox1.Items.Add("option1"); 
     comboBox1.Items.Add("option2"); 

     comboBox2.Items.Add("option1"); 
     comboBox2.Items.Add("option2"); 

     comboBox3.Items.Add("option1"); 
     comboBox3.Items.Add("option2"); 

     comboBox1.OnSelectedIndexChanged += comboBox1_OnSelectedIndexChanged; 
     comboBox2.OnSelectedIndexChanged += comboBox2_OnSelectedIndexChanged; 
     comboBox3.OnSelectedIndexChanged += comboBox3_OnSelectedIndexChanged; 
    } 

    void comboBox1_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     comboBox1.Enabled = false; 
     comboBox2.Enabled = true; 
    } 

    void comboBox2_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     comboBox2.Enabled = false; 
     comboBox3.Enabled = true; 
    } 

    void comboBox3_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     comboBox1.Enabled = true; 
     comboBox3.Enabled = false; 
    } 
} 
+0

コンボボックスを有効にすることはありません... – itsme86

+0

ありがとう、ありがとう。 – user2647513

+0

あなたが持っている方法ではまだ動作しません。 – itsme86

0

私が使用するのと同じSelectedIndexChangedハンドラをコンボボックスの配列を作成し、それらのすべての3を持っていると思います最初の1つは有効になり、残りの2つは有効になりません。

これも簡単にスケーラブルです。フローに別のコンボボックスを追加する場合は、配列を_boxes配列に追加するだけです。

+0

itsme86、このコードをコンボハンドラの1つ、例えばcomboBox 1に入れる必要がありますか? – Thomas

+0

配列をメソッド内ではなく、 'Form1'クラスの中に入れます。このメソッドは、コンボボックスの 'SelectedIndexChanged'イベントの3つすべてのイベントハンドラでなければなりません。それらはすべて同じイベントハンドラを使用する必要があります。 – itsme86

+0

申し訳ありませんがitsme86私は現在のコードでこれを実装するのに問題があります。私は3つのコンボのイベントハンドラをすでに3つ持っており、コードの他の部分に使用されています。私はそれらのすべてのための1つのイベントハンドラを使用することはできません。これは私のC#スキルのために少し上級です:-) – Thomas

関連する問題