- - PR -
ユーザーコントロールでのEscキー動作について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-22 16:21
こんにちは。
開発環境VB2005.NET WindowsXP DB=Firdbird 現在ユーザーコントロールを作成しています。 Inherits UserControl コントロールの内部に「閉じる」ボタンを作成して クリックされるとコントロールを終了するように しています。 「Esc」キーを押したら、閉じるボタンと同じ制御にしたいのですが、 フォームではないので「KeyPreview」プロパティもないし、 当然CloseButtonもないので、以下のように、各コントロールでKeyDownが 走った場合に、PerformClickさせていますが、 もっと他にスマートな方法はありますでしょうか? ご教授かもしくはヒントのほど、よろしくお願いいたします。 Private Sub SearchText_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles SearchText.KeyDown, SelectionCombo.KeyDown, DataGrd.KeyDown If e.KeyCode = Keys.Escape Then e.Handled = True CloseButton.PerformClick() End If End Sub | ||||
|
投稿日時: 2006-12-22 18:33
UserControl クラスのオーバーライド可能なメソッドを眺めて見ましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-12-25 10:28
じゃんぬねっとさん、ご返信ありがとうございます。
ユーザーコントロール側で以下を追加しました。 'Escキー動作で閉じるを行いたいため以下を追加 12/25 Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs) MyBase.OnKeyDown(e) End Sub Public Sub SearchBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown Debug.Print(e.KeyCode) End Sub 呼び出し側のフォームのKeyPreview=TRUE Private Sub SearchBox2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles SearchBox2.KeyDown If e.KeyCode = Keys.Escape Then e.Handled = True 'CloseButton.PerformClick() Me.SearchBox2.Visible = False End If End Sub すみません・・・ 以上のどれにも「Esc」キーでも他のキーでもブレークしないのですが 何か根本的に勘違いしているのでしょうか? Inherits UserControl Inheritsの右側を他のものを指定すると、型が違うとエラーになります よろしくお願いいたします。 | ||||
|
投稿日時: 2006-12-25 10:57
オーバーライドするメソッドが検討違いなのでしょう。 たとえば、もっと上位の ProcessCmdKey メソッド あたりだとどうでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-12-25 13:01
じゃんぬねっとさん、ご返信ありがとうございます。
上位クラスのProcessCmdKeyでやってみます。 ご助言ありがとうございました。 | ||||
|
投稿日時: 2006-12-25 13:16
上位 "クラス" ではないです。 UserControl 内の ProcessCmdKey メソッドでどうぞ。 確認ができましたら、ProcessKeyPreview メソッドなどについても調べると良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1