4

Visual Studio 2005 を使用して VB.NET で開発しています。

Load メソッド内で入力されるフォームに ComboBox (myCombo) があります。

また、フォームのラベルを変更するために myCombo.SelectedIndexChanged を処理しました。

編集:イベント ハンドラーを追加する方法は、デザイナーのコンボ ボックスをダブルクリックすることでした。スケルトン コードがコード ビューに表示されます。

フォームが読み込まれると、アイテムが myCombo に追加されるたびに SelectedIndexChanged が発生するように見えます。

これは私が望んでいるものではありませんが、ユーザーが選択を変更したときにのみ呼び出される別のイベント ハンドラーがあると考えています。

ここに私が持っているもののいくつかのコードがあります:

Private Sub myDlg_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ' this is all I do with myCombo in this sub

    list = GetListOfItemsToAdd()
    myCombo.DataSource = list 
    myCombo.DisplayMember = "DisplayMember"
    myCombo.ValueMember = "ValueMember"

End Sub

誰かが私を正しい方向に向けることができますか?

いつもありがとう。

更新: 私が使用した解決策は、イベント ジェネレーターの後の Handles 句を削除し、これを上記の「End Sub」の前に追加することでした。

AddHandler myCombo.SelectedIndexChanged, AddressOf myCombo_SelectedIndexChanged

みんな、ありがとう!

4

3 に答える 3

10

SelectionChangeCommitted は、ユーザー が ComboBox の選択を変更したときに呼び出されるイベント ハンドラーです。

SelectionChangeCommitted の MSDN ドキュメントから:

SelectionChangeCommitted は、ユーザーがコンボ ボックスの選択を変更した場合にのみ発生します。SelectedIndexChanged または SelectedValueChanged を使用してユーザーの変更をキャプチャしないでください。これらのイベントは、プログラムによって選択が変更されたときにも発生するためです。

ただし、状況によっては、SelectionChangeCommitted イベントが発生しないというバグがあることに注意してください (具体的には、キーボードを使用してリストをドロップダウンし、新しい項目までスクロールしてから、タブで別のコントロールに移動します。選択は変更されますが、 SelectionChangeCommitted イベントは発生しません)。http://connect.microsoft.com/VisualStudio/feedback/details/115189/selectionchangecommitted-event-sometimes-not-raised-by-comboboxを参照してください。

実際には、ユーザーはこれを問題として認識していないことがわかりました。そのため、SelectedIndexChanged を使用する他の回避策ではなく、SelectionChangeCommitted を使用し続けています。でももちろんYMMV。

于 2009-12-24T06:48:27.433 に答える
5

データをロードした後にのみ、イベント ハンドラーを追加できます。(AddHandlerキーワードを使用)

于 2009-12-24T00:26:28.490 に答える
1

自分が変更を行っているかどうかを判断するために使用するブール値を持つことができます。アイテムの変更を開始するときは、に設定しtrueます。終了したら、に設定しfalseます。イベントハンドラーでは、ブール値をテストして、ユーザーが変更のイニシエーターであるかどうかを判断し、そうでない場合はイベントを無視できます。

于 2009-12-24T00:41:47.113 に答える