2011-12-26 2 views
0

私は、c#winformアプリケーションのデータソースプロパティでコンボボックスを埋めています。一方、私は同じコンボのSelectedIndexChangedでアクションを開始しています。問題は、コンボがデータソースで満たされるたびに、SelectedIndexChangedが呼び出され、ユーザーが実際に選択を行ったときに呼び出されるようにすることです。 コンボを埋めるときにこのイベントを呼び出さないようにする方法はありますか?データソースを塗りつぶすときにindexchangedイベントを呼び出さないでください

これは私のコードの一部

//Filling the combo with some data 
combo_cliente.DataSource = clientes; 
combo_cliente.DisplayMember = "NomComp"; 
combo_cliente.ValueMember = "IDPersona"; 

private void combo_cliente_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Here is the action to be triggered when user perfoms a selection 
} 

おかげでコントロールがインスタンス化されるとき、それらが結合しているので、あなたはデザイナーとイベントハンドラを割り当てたと仮定し

+0

簡単なブールスイッチを使用してください。データソースを設定する前に、 'true'と' false'に設定してください。イベントハンドラでは、スイッチの値がtrueの場合は何もしません。 – Tigran

+0

私はすでにそれについて考えていましたが、私はちょうど "ファンシーな"方法があるかどうかを知りたかったのです –

答えて

1

たぶん解除し、再度サブスクライブ:

combo_cliente.SelectedIndexChanged -= combo_cliente_SelectedIndexChanged; 
combo_cliente.DataSource = clientes; 
combo_cliente.SelectedIndexChanged += combo_cliente_SelectedIndexChanged; 
1

イムです。代わりに、コントロールに値を設定した後にコード内で割り当てることもできます。

+0

実際には私のコンボはコンボボックスで選択され、別のコンボが選択されたので、実行時に複数回挿入される可能性があります。 –

+0

他のコンボボックス選択インデックスが変更された場合は、このコンボボックスからハンドラを切り離し、データソースを設定してからハンドラを再接続します。 – dumdum

+0

@dumdumハンドラをどのように切り離しますか?私はデザイナーを使ってイベントを添付しました。 –

0

aspxページではなく、コード内にイベントハンドラをアタッチし、コントロールのロードが完了したことを確認します。

0

コンボボックスの最初に空白のレコードを追加する必要があります。あなたのコードでは、これを書くことができます。

private void combo_cliente_SelectedIndexChanged(object sender, EventArgs e) { if!(comboBox1.SelectedValue.ToString()== string.Empty) { //Here is the action to be triggered when user perfoms a selection } }

関連する問題