- - PR -
【Winアプリ】DataGridのセル内での上・下キーイベントを取る方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-12 21:39
いつもお世話になっております。
質問させて頂きます。 開発環境:Visual Studio.NET 2003 開発言語:C#(Windowアプリケーション) DataGridのセル内にカーソルがある状態で 上・下キーを押した時のイベントをとる方法を探しています。 これまで行った方法としては 1、フォームのProcessDialogKeyをオーバーライドする方法。************************************************** protected override bool ProcessDialogKey(Keys keyData) { switch( keyData ) { case Keys.Up: return false; case Keys.Down: return false; default: return base.ProcessDialogKey (keyData); } return true; } ************************************************** 2、セルのTextBoxのKeyDownイベントを捕捉するようにする方法。 ************************************************** private void Frm_LotSelect_Load(object sender, System.EventArgs e) { //テーブルスタイルの取得 DataGridTableStyle ts; ts = this.dataGrid1.TableStyles["Table1"]; //DataGridTextBoxColumnの取得 DataGridTextBoxColumn cs = (DataGridTextBoxColumn) ts.GridColumnStyles[0]; //TextBoxの取得 TextBox tb = cs.TextBox; //KeyDownイベントハンドラを追加 tb.KeyDown += new KeyEventHandler(tb_KeyDown); } private void tb_KeyDown(object sender, KeyEventArgs e) { if( e.KeyValue == Keys.Up ) || e.KeyValue == Keys.Down) ) { e.Handled = true; return; } ************************************************** の2点を試してみました。 イベントは発生するのですが Keys列挙体の【Menu】のキー値を パラメータとして受け取ってしまいます。 何か誤っている点等あれば ご教授頂けないでしょうか? 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2006-01-13 01:37
普通は KeyCode プロパティを使います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-13 08:39
返答ありがとうございます。
>普通は KeyCode プロパティを使います。 おっしゃるとおり通常のKeyCodeプロパティを使用していましたが 上・下キーを押しているのにもかかわらず 【Menu】のキー値が格納されてきてしまいます。 方法1・2共に【Menu】のキー値が格納されます。 そのためKeyValue等他のプロパティを試していました。 上・下キーを取得する方法はないのでしょうか? ご教授願います。 | ||||||||
|
投稿日時: 2006-01-13 08:49
Menu + Keys.Up という意味であれば、
で取得できますが、根本的な解決にはならないでしょうね。 # 原因が判りません... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-13 08:59
早速のご返答ありがとうございます。
>で取得できますが、根本的な解決にはならないでしょうね。 ># 原因が判りません... 通常はセル内の上・下キーイベントは取れるんでしょうか? それではこのプログラムに不具合の可能性もあり・・・ なにか特別な方法を取らないと取得できないと勘違いしておりましたが。 しかし不具合という不具合は見当たらないですが。 とりあえずMenu+Keys.UPをやってみます。 ありがとうございます。 | ||||||||
|
投稿日時: 2006-01-13 10:19
コード:
--------------------------------------------- if ((e.KeyCode && Keys.Up) == Keys.Up) { } --------------------------------------------- 上記試してみましたが、e.KeyCode && Keys.Upの部分が 『&&を・・・型のオペランに適用することはできません』 ということで言語の仕様上無理のようでした。 列挙型同士の演算は出来なかったんですね。 他に方法を探して見ます。 | ||||||||
|
投稿日時: 2006-01-13 10:34
「&」だけで OK です。orz _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-13 11:26
>「&」だけで OK です。orz
すいません、わざわざありがとうございます。 しかし思ったような動作にはなりませんでした。 色々手は打ちましたが DataGridのセル内で上下キーのキーコードを 判別することは不可能のようです・・・ どうやら特殊キーとされている上・下・Enterキー等はすべて 【Menu】のキー値が格納されてくるようです。 意味不明な動作ですが。 結局、何をしたいかと申しますと 上下キーで行の移動をさせたくないと思い キーイベントを取得する方法で考えていました。 他にも方法はあるはずなので探してみます。 じゃんぬねっとさん、ありがとうございます。 |