この記事では 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 の中身に関して詳細なことを知りたい場合は、次のリファレンスを確認してみて下さい。
今回使った e のプロパティは次の通りです。
プロパティ | 説明 |
Handled | イベント処理の現在の状態を示す値を取得または設定する。 |
Key | イベントに関連付けられたキーボードのキーを取得または設定する。 |
以上、最後まで読んで頂きありがとうございました。