2

私のアプリをWinFormsからWPFに変換しています。WinFormsでコンボボックスをクリアすると、combobox.selectedindexchangeが起動しないというこの問題に遭遇しました。ユーザーが実際にインデックスを変更したときにのみ起動します。

それが私に必要な機能です。ただし、WPFではcombobox.SelectionChangedしか見つかりません。残念ながら、これはインデックスの変更とコンボボックスのクリア(変更)の両方で発生します。

WPFで、ユーザーがインデックスを変更したときにのみイベントをトリガーするにはどうすればよいですか?WinFormsソリューションのような、私が見逃しているソリューションがあると思います。グローバル変数を使用してゲームをプレイしないようにし、以前に選択されたものを追跡する必要があります....それは混乱です。

Mouseleaveも混乱です。

助けていただければ幸いです。

4

2 に答える 2

1

あなたの場合、SelectionChangedイベントに実装できます:

Private Sub OnSelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
    Dim combo = TryCast(sender, ComboBox)


    If combo.SelectedItem IsNot Nothing Then
        'do something
    End If
End Sub
于 2013-01-15T18:02:54.237 に答える
1

イベント ハンドラーを削除し、clear メソッドを呼び出して、イベント ハンドラーを再度追加することができます。

コード例:

<StackPanel>
    <ComboBox Name="myCB"                   
              SelectionChanged="ComboBox_SelectionChanged">
         <ComboBoxItem>test1</ComboBoxItem>
         <ComboBoxItem>test2</ComboBoxItem>
         <ComboBoxItem>test3</ComboBoxItem>
     </ComboBox>

     <Button Content="Clear" Click="Button_Click" />
</StackPanel>

MainWindow クラス:

Class MainWindow 

    Private Sub ComboBox_SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
        Console.WriteLine("Selected index: {0}", CType(sender, ComboBox).SelectedIndex)
    End Sub

    Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
        RemoveHandler Me.myCB.SelectionChanged, AddressOf ComboBox_SelectionChanged
        Me.myCB.Items.Clear()
        AddHandler Me.myCB.SelectionChanged, AddressOf ComboBox_SelectionChanged    
    End Sub
End Class
于 2013-01-15T18:05:58.187 に答える