locked
WPF ComboBoxItem.MouseLeftButtonDownが捕捉できない RRS feed

  • 質問


  • 下のようなテストプログラムを実行していますが、イベントが捕捉されず困っています。

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <Grid>
            <ComboBox Height="34" HorizontalAlignment="Left" Margin="78,59,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="132" IsEditable="True" />
        </Grid>
    </Window>


    Class MainWindow

        Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded

            Dim cbi0 As New ComboBoxItem
            cbi0.Content = "01234"
            Me.ComboBox1.Items.Add(cbi0)

            Dim cbi1 As New ComboBoxItem
            cbi1.Content = "aaabbbcc"
            Me.ComboBox1.Items.Add(cbi1)

            AddHandler cbi0.MouseLeftButtonDown, AddressOf cbi0_MouseLeftButtonDown

        End Sub


        Private Sub cbi0_MouseLeftButtonDown(sender As Object, e As System.Windows.Input.MouseButtonEventArgs)
            'ここに飛んでこない
            Stop
        End Sub

    End Class

    オープンされたComboBoxのリストボックスの項目(ComboBoxItem形式)を左クリックすると、項目別に処理を分岐させるという仕様なのですが、どうすれば実現できるのでしょうか。教えて下さい。
    2016年6月15日 8:15

回答

  • 以下が参考になると思います。

    UIElement.MouseLeftButtonDown イベント
    https://msdn.microsoft.com/ja-jp/library/system.windows.uielement.mouseleftbuttondown.aspx

    MouseLeftButtonDownの代わりに、PreviewMouseLeftButtonDownを使ってみて下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク huahi11112 2016年6月16日 11:19
    2016年6月15日 8:42
    モデレータ
  • ドロップダウンボックスのキーボード選択とマウス選択で処理を変える必要がある等の理由で、ほかのイベントでは処理できないと分かりました。結果としてはPreviewMouseLeftButtonDownイベントで動作しました。

    速やかな御回答をいただき、ありがとうございました。でも、ハンドルできないMouseLeftButtonDownとは、何のためにあるのでしょうか。

    • 回答としてマーク huahi11112 2016年6月16日 11:30
    2016年6月16日 11:30

すべての返信

  • 以下が参考になると思います。

    UIElement.MouseLeftButtonDown イベント
    https://msdn.microsoft.com/ja-jp/library/system.windows.uielement.mouseleftbuttondown.aspx

    MouseLeftButtonDownの代わりに、PreviewMouseLeftButtonDownを使ってみて下さい。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク huahi11112 2016年6月16日 11:19
    2016年6月15日 8:42
    モデレータ
  • ComboBoxは上下キー(↑↓キー)でも項目を選択することができますが、その場合の対処は要らないのでしょうか?

    また、ドロップダウンリスト中の項目のひとつにマウスオーバーしておいてEnterキーを押すと、項目の選択が確定されたことになります。

    マウスクリックだけでなくその他の選択手段にも対応するのであれば、ComboBoxItem.Selectedイベント(ListBoxItem.Selectedイベント)を使うという方法もあると思います。

    ちなみに一般論として、質問する際は開発環境やターゲットOSのバージョンなどを詳しく書くようにしましょう。

    • 編集済み sygh 2016年6月15日 13:41
    2016年6月15日 13:31
  • キーによる選択処理は、プログラムが完成しています。

    ComboBoxItem.Selectedというイベントもあるのですね。使用を検討します。
    今回の様な低レベルの質問程度で開発環境やターゲットOSを記載する必要は無いと考えております。

    御回答ありがとうございました。


    2016年6月15日 22:47
  • 蛇足となってしまうかもしれませんが、ComboBoxのSelectionChangedイベントを使ってはいかがでしょうか。こちらですとキーボード処理・マウス処理を1つのイベントで対応でき、コンボボックスアイテムを増やすたびにイベントを追加する必要もありません。
    • 編集済み runcs 2016年6月16日 1:34
    2016年6月16日 1:31
  • ドロップダウンボックスのキーボード選択とマウス選択で処理を変える必要がある等の理由で、ほかのイベントでは処理できないと分かりました。結果としてはPreviewMouseLeftButtonDownイベントで動作しました。

    速やかな御回答をいただき、ありがとうございました。でも、ハンドルできないMouseLeftButtonDownとは、何のためにあるのでしょうか。

    • 回答としてマーク huahi11112 2016年6月16日 11:30
    2016年6月16日 11:30
  • 御回答ありがとうございました。SelectionChangedですと、ドロップダウンリストを↑↓キーで移動させるたびにイベントが発生するため使えないのです。返信遅れて済みませんでした。
    2016年6月16日 11:41
  • 技術系のフォーラムやメーリングリストで質問するときに、環境の情報をきちんと記すのは鉄則です。

    技術系メーリングリストで質問するときのパターン・ランゲージ

    フレームワークのバージョンやOSの違いによって細部の挙動が異なる、というようなことは、ソフトウェアの規模の大小にかかわらずよくあることです。また、古いバージョンでは使えなかった手法が、新しいバージョンでは使えるようになっている、ということもよくあります(その逆もまたしかり)。今回の問題の争点ではありませんが、具体的な環境情報の提示というのは基本動作にしたほうがよいと思います。


    • 編集済み 星 睦美 2016年6月17日 5:06 soothing
    2016年6月16日 13:14
  • 速やかな御回答をいただき、ありがとうございました。でも、ハンドルできないMouseLeftButtonDownとは、何のためにあるのでしょうか。

    WPFにはWindowsフォームには無かったルーティングイベントという概念があります。ネットを検索すれば解説されているページが多く見つかると思いますが、そのうちのいくつかをご紹介しておきます。

    [WPF] WPF入門 ~ルーティングイベント~
    http://blogs.wankuma.com/kzt/archive/2009/03/24/170149.aspx

    ルーティングイベント
    http://www.kanazawa-net.ne.jp/~pmansato/wpf/wpf_base.htm#event


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年6月17日 0:45
    モデレータ
  • フォーラム オペレーターの星 睦美です。
    今回のスレッドと関連しない内容と判断しましたので一部の返信を削除させていただきました。

    フォーラムでのコミュニケーションの行き違いを避けるために、オペレーターからフォーラムへの質問の投稿に関するお願いをしています。フォーラムのご利用方法(質問の投稿)について を参考にご覧いただければ幸いです。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2016年6月17日 5:12 編集
    2016年6月17日 4:57
  • 星さんに付言させて頂きますが、回答者の方には以下のスレッドもぜひ確認して頂きたく思います。

    フォーラムへの回答に関するガイドラインおよびフォーラム運営について(再掲)

    「不適切な発言」フラグの濫用は、アカウント削除もあり得るようですのでご注意ください。


    本フォーラムは、ユーザー(開発者)同士で情報交換を行うためのコミュニティです。初めて利用される方は、以下のアナウンスをご覧ください。 https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?


    2016年6月17日 5:06
    モデレータ