- PR -

ユーザーコントロールでのEscキー動作について

1
投稿者投稿内容
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 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
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-22 18:33
引用:

りんごさんの書き込み (2006-12-22 16:21) より:

「Esc」キーを押したら、閉じるボタンと同じ制御にしたいのですが、フォームではないので「KeyPreview」プロパティもないし、当然CloseButtonもないので、以下のように、各コントロールでKeyDownが走った場合に、PerformClickさせていますが、もっと他にスマートな方法はありますでしょうか?


UserControl クラスのオーバーライド可能なメソッドを眺めて見ましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 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の右側を他のものを指定すると、型が違うとエラーになります

よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-25 10:57
引用:

りんごさんの書き込み (2006-12-25 10:28) より:

すみません・・・以上のどれにも「Esc」キーでも他のキーでもブレークしないのですが
何か根本的に勘違いしているのでしょうか?


オーバーライドするメソッドが検討違いなのでしょう。
たとえば、もっと上位の ProcessCmdKey メソッド あたりだとどうでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2006-12-25 13:01
じゃんぬねっとさん、ご返信ありがとうございます。

上位クラスのProcessCmdKeyでやってみます。

ご助言ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-25 13:16
引用:

りんごさんの書き込み (2006-12-25 13:01) より:

上位クラスのProcessCmdKeyでやってみます。


上位 "クラス" ではないです。
UserControl 内の ProcessCmdKey メソッドでどうぞ。

確認ができましたら、ProcessKeyPreview メソッドなどについても調べると良いでしょう。

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

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