パネルコントロール、ボタンコントロール等が配置されているForm上で
どのコントロールがアクティブになっている状態でもキー入力+リターンを取得したいのですが。
現在下記のような実装
FormのKeyPreviewプロパティをTrueに設定し、キープレスイベントで入力文字を取得し、リターン押下時に
メッセージボックスを表示
このとき、ボタンコントロールがアクティブになっているとリターンキーのキープレスイベントが
発生しないのでProcessDialogKeyでリターン押下時にメッセージボックスを表示を追加しました。
上記によりボタンがアクティブになっていてもリターン押下でメッセージボックスが表示されるように
なったのですがチェックボックスなどがアクティブになっているときに、キー入力を行い、
リターンキーを押下するとProcessDialogKey、キープレスイベントの2つのイベントが発生してしまい
2回メッセージボックスが表示されてしまいます。
一か所で吸収するようなことはできるのでしょうか?
下記のような処理になっています。
VB.NET
1Public Class Form1 2 Dim test As String 3 Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress 4 '受け取ったキーを表示する 5 If e.KeyChar.ToString = Microsoft.VisualBasic.ChrW(Keys.Enter) Then 6 MessageBox.Show(test + "KeyPress") 7 test = "" 8 Else 9 test += e.KeyChar.ToString() 10 End If 11 End Sub 12 13 Protected Overrides Function ProcessDialogKey( 14 ByVal keyData As Keys) As Boolean 15 If keyData = Keys.Return Then 16 MessageBox.Show(test + "DialogKey") 17 test = "" 18 End If 19 Return MyBase.ProcessDialogKey(keyData) 20 End Function 21End Class
回答2件
あなたの回答
tips
プレビュー