- PR -

VB.NETでファンクションボタン制御

1
投稿者投稿内容
ヤマッコ
常連さん
会議室デビュー日: 2006/06/21
投稿数: 31
投稿日時: 2006-07-06 15:04
お世話になります。

環境:WindowsXP,VS 2005,VB .NET,SQLServer

今、F1からF12までのボタンのある画面を作成しています。
Form_KEYPRESSで、F1〜F12を実行するようにプログラミングしています。
 画面には、テキストボックスがあり、それにフォーカスされた場合に
F1からF12が実行されません。
どのように対応すれば、よいのでしょうか?
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-07-06 15:23
お世話になります。

検証していなくてすいませんが、ProcessDialogKey メソッドで取得できませんか?
ヤマッコ
常連さん
会議室デビュー日: 2006/06/21
投稿数: 31
投稿日時: 2006-07-06 15:41
深山さん、ありがとうございました!

ProcessDialogKey
を使用したら実現できそうです!
サンプルをみつけました。
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
If (keyData And Keys.KeyCode) = Keys.Tab Then
'Tabキーが押されているか調べる
MessageBox.Show("Tabキーが押されました。")
Return True
End If

Return MyBase.ProcessDialogKey(keyData)
End Function


ただ、オーバーライドについて調べたのですが、クラスを継承して、
カスタマイズすると認識しております。
もし、間違えていたらご指摘をお願いできますか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-06 16:00
引用:

ヤマッコさんの書き込み (2006-07-06 15:41) より:

ただ、オーバーライドについて調べたのですが、クラスを継承して、
カスタマイズすると認識しております。


ProcessDialogKey をオーバーライドするなら
テキストボックスを継承したカスタムコントロールを作る必要がありますね。

ただ、ファンクションキーだったら普通に捕捉できませんか?
フォームの KeyPreview = True も忘れずに
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 16:45
引用:

かるあさんの書き込み (2006-07-06 16:00) より:

ProcessDialogKey をオーバーライドするならテキストボックスを継承したカスタムコントロールを作る必要がありますね。


Form の方をオーバーライドしていたら、関係なかったりします...

その前に、ProcessDialogKey メソッドでキーによる処理内容を書いてしまうのは、
お行儀が良くないかもしれませんね。

引用:

System.Windows.Forms.Control.ProcessDialogKey メソッド より:

このメソッドは、Tab、Enter、Esc の各キー、および方向キーなどのダイアログ文字を処理するために、メッセージのプリプロセス中に呼び出されます。コントロールがキーを処理していないことを IsInputKey メソッドが示す場合にだけ、このメソッドが呼び出されます。ProcessDialogKey メソッドは、単に親の ProcessDialogKey メソッドに文字を送信します。コントロールに親がない場合は false を返します。Form クラスは、このメソッドをオーバーライドして、ダイアログ キーの実際の処理を実行します。このメソッドは、コントロールが Windows フォーム アプリケーション内でホストされるか、ActiveX コントロールとしてホストされる場合にだけ呼び出されます。

継承時の注意 派生クラスで ProcessDialogKey メソッドをオーバーライドする場合、コントロールはキーを処理したことを示すために true を返す必要があります。コントロールによって処理されないキーの場合は、基本クラスの ProcessDialogChar メソッドを呼び出した結果が返されます。コントロールがこのメソッドをオーバーライドする必要はほとんどありません。


ですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-06 17:18
[quote]
じゃんぬねっとさんの書き込み (2006-07-06 16:45) より:
Form の方をオーバーライドしていたら、関係なかったりします...

その前に、ProcessDialogKey メソッドでキーによる処理内容を書いてしまうのは、
お行儀が良くないかもしれませんね。

引用:



うぁ、ご指摘ありがとうございます(汗
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-06 18:02
引用:

かるあさんの書き込み (2006-07-06 17:18) より:

うぁ、ご指摘ありがとうございます(汗


誤解されているかもしれないので、一応書かせて頂きますが、
引用されている後半の 2 行は指摘ではなく、かるあさんへの同意ですよ。(=^-^)

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

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