DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ListViewのキー操作キャンセルについて

環境/言語:[XP,7  C# .NET3.5]
分類:[.NET]

お世話になります。

ある条件が成立する場合、ListView(詳細表示モード)で上下矢印キーを押しても選択アイテムが変更がされないようにしたいのですが、可能でしょうか?

ListViewの詳細表示モードにおいて、矢印の上下キーを押したことはPreviewKeyDownイベントで検出できました。

-------------------------------------------------
.NET Framework 2.0からはPreviewKeyDownイベントが追加され、これを使えば簡単です。PreviewKeyDownイベントはKeyDownイベントの前に発生します。KeyDownやKeyUpイベントが発生しないようなキーが押された場合も発生し、押されたキーを知ることができます
さらに、KeyDownやKeyUpイベントが発生しないようなキーが押された場合でも、PreviewKeyDownイベントハンドラでPreviewKeyDownEventArgs.IsInputKeyプロパティをTrueにすることにより、KeyDownやKeyUpイベントが発生するようになります。ただしこの場合は、そのキー本来の機能(例えば、矢印キーであれば、フォーカスの移動)は失われます。
-------------------------------------------------
上記のような記述があったので、「e.IsInputKey = true;」としてみたのですが、目的の動作にはなりませんでした。

目的の動作を実現するにはどのようにすればよろしいでしょうか。
ご教示のほど、よろしくお願いします。
> ある条件が成立する場合、ListView(詳細表示モード)で上下矢印キーを押しても選択アイテムが変更がされないようにしたいのですが、可能でしょうか?

KeyDownイベントハンドラでe.Handledをtrueにしてみてください。

ComboBoxが上下矢印キーで項目を変更できないようにする
http://dobon.net/vb/dotnet/control/cbignoredownkey.html

と同じ方法でできるか、試していただけますか?
お世話になります。
試してみまたのですが、KeyDownイベントがそもそも発生していません。矢印キーについてはKeyDownを発生させることはできないのでしょうか。

お手数をおかけし申し訳ありませんが、よろしくお願いします。

■No29691に返信(管理人さんの記事)
>>ある条件が成立する場合、ListView(詳細表示モード)で上下矢印キーを押しても選択アイテムが変更がされないようにしたいのですが、可能でしょうか?
>
> KeyDownイベントハンドラでe.Handledをtrueにしてみてください。
>
> ComboBoxが上下矢印キーで項目を変更できないようにする
> http://dobon.net/vb/dotnet/control/cbignoredownkey.html
>
> と同じ方法でできるか、試していただけますか?
2012/01/30(Mon) 18:05:01 編集(投稿者)

■No29717に返信(るいさんの記事)
> お世話になります。
> 試してみまたのですが、KeyDownイベントがそもそも発生していません。矢印キーについてはKeyDownを発生させることはできないのでしょうか。
特別な事はせずに新規プロジェクトで KeyDown イベントのコードだけ
書いて確認しましたが、問題なくイベントが起こっていることを確認
できました。

        private void listView1_KeyDown(object sender, KeyEventArgs e)
        {
            Console.WriteLine(e.KeyCode);
        }

[出力]
>Down
>Up
>Left
>Right

DOBON.NET | プログラミング道 | プログラミング掲示板