C#

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

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

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

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

【WPF】ComboBoxの使い方と実装方法を解説(バインド)WPFでComboBox(コンボボックス)の初期化、アイテムの追加(バインド)、選択された値の取得など使い方と実装方法について詳しく説明をしています。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イベントに関連付けられたキーボードのキーを取得または設定する。

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

プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA