- PR -

【Winアプリ】DataGridのセル内での上・下キーイベントを取る方法

投稿者投稿内容
daikoku
常連さん
会議室デビュー日: 2005/09/22
投稿数: 21
投稿日時: 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】のキー値を
パラメータとして受け取ってしまいます。

何か誤っている点等あれば
ご教授頂けないでしょうか?
宜しくお願いいたします。


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-13 01:37
引用:

daikokuさんの書き込み (2006-01-12 21:39) より:

イベントは発生するのですが
Keys列挙体の【Menu】のキー値を
パラメータとして受け取ってしまいます。


普通は KeyCode プロパティを使います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
daikoku
常連さん
会議室デビュー日: 2005/09/22
投稿数: 21
投稿日時: 2006-01-13 08:39
返答ありがとうございます。

>普通は KeyCode プロパティを使います。
おっしゃるとおり通常のKeyCodeプロパティを使用していましたが
上・下キーを押しているのにもかかわらず
【Menu】のキー値が格納されてきてしまいます。
方法1・2共に【Menu】のキー値が格納されます。
そのためKeyValue等他のプロパティを試していました。

上・下キーを取得する方法はないのでしょうか?
ご教授願います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-13 08:49
引用:

daikokuさんの書き込み (2006-01-13 08:39) より:

上・下キーを取得する方法はないのでしょうか?


Menu + Keys.Up という意味であれば、

コード:

    if ((e.KeyCode && Keys.Up) == Keys.Up) {

    }


で取得できますが、根本的な解決にはならないでしょうね。

# 原因が判りません...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
daikoku
常連さん
会議室デビュー日: 2005/09/22
投稿数: 21
投稿日時: 2006-01-13 08:59
早速のご返答ありがとうございます。

>で取得できますが、根本的な解決にはならないでしょうね。
># 原因が判りません...
通常はセル内の上・下キーイベントは取れるんでしょうか?
それではこのプログラムに不具合の可能性もあり・・・
なにか特別な方法を取らないと取得できないと勘違いしておりましたが。
しかし不具合という不具合は見当たらないですが。

とりあえずMenu+Keys.UPをやってみます。
ありがとうございます。

daikoku
常連さん
会議室デビュー日: 2005/09/22
投稿数: 21
投稿日時: 2006-01-13 10:19
コード:
---------------------------------------------
if ((e.KeyCode && Keys.Up) == Keys.Up) {

}
---------------------------------------------

上記試してみましたが、e.KeyCode && Keys.Upの部分が
『&&を・・・型のオペランに適用することはできません』
ということで言語の仕様上無理のようでした。
列挙型同士の演算は出来なかったんですね。

他に方法を探して見ます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-13 10:34
引用:

daikokuさんの書き込み (2006-01-13 10:19) より:

『&&を・・・型のオペランに適用することはできません』
ということで言語の仕様上無理のようでした。


「&」だけで OK です。orz

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
daikoku
常連さん
会議室デビュー日: 2005/09/22
投稿数: 21
投稿日時: 2006-01-13 11:26
>「&」だけで OK です。orz
すいません、わざわざありがとうございます。
しかし思ったような動作にはなりませんでした。

色々手は打ちましたが
DataGridのセル内で上下キーのキーコードを
判別することは不可能のようです・・・

どうやら特殊キーとされている上・下・Enterキー等はすべて
【Menu】のキー値が格納されてくるようです。
意味不明な動作ですが。
 
結局、何をしたいかと申しますと
上下キーで行の移動をさせたくないと思い
キーイベントを取得する方法で考えていました。
他にも方法はあるはずなので探してみます。
じゃんぬねっとさん、ありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)