> 作業効率UP!! オススメのモバイルモニターを紹介

【WPF】ComboBoxが矢印キーで項目の変更を無効にする方法

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

この記事では ComboBox の項目を矢印キーを使って、選択項目を変更できないようにする方法を紹介します。

ComboBox の項目をマウス操作だけで選択できるようにしたい場合があれば、この方法を使ってみて下さい。

WPF で ComboBox の基本操作を確認したい方は以下の URL から確認してみて下さい。

あわせて読みたい
【WPF】ComboBoxの使い方と実装方法を解説(バインド) WPF では ComboBox(コンボボックス)と呼ばれる、プログラムの開発ではよく利用されるコントロールが存在します。 プルダウン形式で項目のリストを表示するため、余計...

今回は次のサンプルプログラムを使います。この状態では、矢印キーを使って項目を変更することができます。

<Window x:Class="Sample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="120" Width="280">
    <StackPanel Margin="10">
        <ComboBox Name="cmbSample1" SelectedIndex="0">
            <ComboBoxItem Content="2022年"/>
            <ComboBoxItem Content="2023年"/>
            <ComboBoxItem Content="2024年"/>
            <ComboBoxItem Content="2025年"/>
        </ComboBox>
        <ComboBox Name="cmbSample2" SelectedIndex="0" Margin="0,10,0,0">
            <ComboBoxItem Content="1月"/>
            <ComboBoxItem Content="2月"/>
            <ComboBoxItem Content="3月"/>
            <ComboBoxItem Content="4月"/>
        </ComboBox>
    </StackPanel>
</Window>

実行した時の画面が次の通りです。

矢印キーでComboBox項目の変更を無効にする方法

ComboBox の PreviewKeyDown イベントハンドラで、矢印キーの場合だけ Handled プロパティ値を true にすれば無効にできます。

Handled プロパティはイベントを処理したかどうかを設定します。false なら未処理、 true なら処理済みになります。Handled プロパティを強制的に true にすることで、キーイベントを処理済みとして、この後に起こるコントロールのイベントをキャンセルしています。

次のように、押されたキーボードのキーを取得して、上下左右の矢印キーなら Handled プロパティを true にします。

private void cmbSample_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Down || e.Key == Key.Up || e.Key == Key.Left || e.Key == Key.Right)
    {
        e.Handled = true;
    }
}
<Window x:Class="Sample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="120" Width="280">
    <StackPanel Margin="10">
        <ComboBox Name="cmbSample1" SelectedIndex="0" PreviewKeyDown="cmbSample_PreviewKeyDown">
            <ComboBoxItem Content="2022年"/>
            <ComboBoxItem Content="2023年"/>
            <ComboBoxItem Content="2024年"/>
            <ComboBoxItem Content="2025年"/>
        </ComboBox>
        <ComboBox Name="cmbSample2" SelectedIndex="0" Margin="0,10,0,0" PreviewKeyDown="cmbSample_PreviewKeyDown">
            <ComboBoxItem Content="1月"/>
            <ComboBoxItem Content="2月"/>
            <ComboBoxItem Content="3月"/>
            <ComboBoxItem Content="4月"/>
        </ComboBox>
    </StackPanel>
</Window>

これで矢印キーによる項目の変更を無効にすることができました。

イベントの引数である e には、そのイベントの付加情報が格納されています。e の中身に関して詳細なことを知りたい場合は、次のリファレンスを確認してみて下さい。

KeyEventArgs クラスのリファレンス

今回使った e のプロパティは次の通りです。

プロパティ 説明
Handled イベント処理の現在の状態を示す値を取得または設定する。
Key イベントに関連付けられたキーボードのキーを取得または設定する。

以上、最後まで読んで頂きありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!