- PR -

[Win]DataGridで対応しているキー操作について

1
投稿者投稿内容
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-10 15:54
お手数かけます。

Windwos.Forms.DataGridで対応しているキー操作(特殊キー)の情報を必要としています。
一覧情報の掲載先などご存知でしたら教えて下さい。
masa
常連さん
会議室デビュー日: 2003/04/16
投稿数: 38
投稿日時: 2004-12-11 19:35
DataGridコントロールはすべて普通キーみたいなので、(そこだけを見ると)プリプロセスのProcessDialogKeyメソッドでは処理されないようです。ただし、DataGridコントロールの中にTextBoxコントロールなどが配置されるので、これがプリプロセスされます(と思います)。

DataGridコントロールはほとんど自らキー処理をしてしまいます。
DataGridコントロールでは、プリプロセスされるキーにつていは、自身のProcessDialogKeyメソッドで処理し、プリプロセスされないキーは自身のProcessKeyPreviewメソッドで処理するようです。
よって、コントロールを継承してこれらのメソッドをオーバーライドして
基本クラス(DataGrid)のメソッドを呼ぶ前に、独自の処理を実行するようにすればよいでしょう。

また、キー処理をまとめて、もしくは継承なしで行うには、プリプロセスで最初に呼び出されるProcessCmdKeyメソッドをオーバーライドするとよいです。このオーバーライドは、フォームかコントロールで行います。
ProcessCmdKeyメソッドはWindowsメッセージを判別して処理する必要があるので、その知識が必要になります。以下はサンプル・コード。
コード:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
	const int WM_KEYDOWN = 0x100;
	if (msg.Msg == WM_KEYDOWN)
	{
		if (keyData == Keys.Enter)
		{
			this.ProcessTabKey(true);
			return true;
		}
	}
	return base.ProcessCmdKey (ref msg, keyData);
}



DataGridのキー操作なら、ほかにも同じ内容の書き込みがいくつかありますよ。
例えばこれ↓
件名:DataGridでのTabキー押下処理について
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-11 20:35
masaさんレスありがとうございます。

サンプルまでご提示いただき、ありがとうございます。
ご指摘のように、DataGridでは内部でキーを処理しています。

現在、DataGridに組み込むカスタムコントロールを作成中で、
ある程度の特殊キーを拾い出し、また組み込むことに成功していますが、
今回、この対応に漏れがないかを確認する為、
内部で処理されるキーの一覧が整理されたものがあればと考え、
お尋ねしました。

お手数かけて恐縮です。
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-12 14:58
自己レスです。

MSDNに一覧表が掲載されているのを見つけました。
Windows フォームの DataGrid コントロール内の移動に使用できるキーボード ショートカット
お手数かけました。
1

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