- PR -

データグリッドでF5ボタンの捕捉

1
投稿者投稿内容
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-12-29 12:53
データグリッドのセルがアクティブな状態で
F5キーを捕捉出来なくて困っています。

検索したときにいくつか似たような物が見つかったのですが
解決に至っていないようなので新しく投稿します。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8475&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13913&forum=7&4

開発環境は
.NetFramwork1.1, WindowsForm, VisualStudio.2003 で開発しています。

データグリッドが配置されてなかったり、
配置されていたとしてもセルがアクティブな状態でない場合は
問題なくF5キーを捕捉できています。

Form の KeyPreview は True に設定し
Form の KeyDown イベント時に e.KeyCode の値を調べ
押されたキーを判断しています。

よろしくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-12-29 13:01
追記です。

ためしに DataGrid を継承したコントロールをフォームに配置したところ
ProcessCmdKey イベントのタイミングでは F5キー を捕捉出来るところまでは確認しています
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-29 14:09
DataGridTableStyle から DataGridTextBoxColumn を取って、
TextBox に対してハンドラを生成すれば可能?

  DataGridのセル内でのキーイベントを捕捉する

セルがアクティブだと、できないような気がするんですよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-12-29 14:30
こんにちわ じゃんぬねっと さん
お返事ありがとうございます。

どぼんさん の所のサンプルを試してみましたが
やはり F5キー だけは KeyDown を捕捉できませんでした・・・

F5キーを押されたタイミングで データグリッド の内容を
再検索するような動きをつくりたかったんですが、
他に方法がないか考えて見ます。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-12-29 14:42
なんか無理やりですが・・・
こんなのでいいのかな・・・


コード:

Public Class FunctionDownGrid
Inherits DataGrid

Const WM_KEYDOWN As Integer = &H100
Const WM_KEYUP As Integer = &H101

Public Event FunctionKeyDown(ByVal sender As Object, ByVal args As Keys)

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean

If msg.Msg = WM_KEYDOWN Or msg.Msg = WM_KEYUP Then
If keyData = Keys.F1 OrElse _
keyData = Keys.F2 OrElse _
keyData = Keys.F3 OrElse _
keyData = Keys.F4 OrElse _
keyData = Keys.F5 OrElse _
keyData = Keys.F6 OrElse _
keyData = Keys.F7 OrElse _
keyData = Keys.F8 OrElse _
keyData = Keys.F9 OrElse _
keyData = Keys.F10 OrElse _
keyData = Keys.F11 OrElse _
keyData = Keys.F12 Then

RaiseEvent FunctionKeyDown(Me, keyData)
End If
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
End Class



[ メッセージ編集済み 編集者: かるあ 編集日時 2005-12-29 14:44 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-29 15:11
引用:

かるあさんの書き込み (2005-12-29 14:42) より:

なんか無理やりですが・・・
こんなのでいいのかな・・・


実現できているならば、別に良いとは思いますが、
イベント名からして、WM_KEYUP は余分じゃないですか?

それと、keyData はそのままイベント側に送る方が素直な気がします。
イベント側で余計なものは排除すべきかと。

# 通常は、IsInputKey メソッドを通してから送るのが適切なんですが、
# プロセス キーが取得できなくなりますからね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2005-12-29 15:22
こんにちわ じゃんぬねっと さん
お返事ありがとうございます。

引用:

実現できているならば、別に良いとは思いますが、
イベント名からして、WM_KEYUP は余分じゃないですか?


確かにそのとおりですね、WM_KEYDOWN だけ聞くようにします。

引用:

それと、keyData はそのままイベント側に送る方が素直な気がします。
イベント側で余計なものは排除すべきかと。

# 通常は、IsInputKey メソッドを通してから送るのが適切なんですが、
# プロセス キーが取得できなくなりますからね。


そのまま送るというと、どういうことでしょう
イベントの仮引数のことですか?
ByVal args As Keys → ByVal keyData As Keys
にすればいいのかな?



[ メッセージ編集済み 編集者: かるあ 編集日時 2005-12-29 22:03 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-29 15:47
引用:

かるあさんの書き込み (2005-12-29 15:22) より:

確かにそのとおりですね、WM_KEYDOWN だけ聞くようにします。


といっても、厳密には WM_KEYDOWN も本来は不要だったり。(^-^;)

引用:

そのまま送るというと、どういうことでしょう
イベントの仮引数のことですか?
ByVal args As Keys → ByVal keyData As Keys
にすればいいのかな?


そうですね、keyData とした方が素直です。
KeyEventArgs で送るならば「e」ですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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