トップ回答者
UserControlのKeyPressイベント

質問
回答
-
自分でイベントを定義するか、コンテナのイベントとして打ってくださいな。
Public Class UserControl1 'イベントの定義 Event OnControlTextKeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) ''【自分で定義したイベントをクライアントに送る】 ''以下の特徴、一緒にsenderも送れる Private Sub TextBox_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress, TextBox2.KeyPress '二つのテキストボックスのイベントを同時に受け取るため、 'Handles 以下、二つのイベントを定義 '作成したイベントを発信 RaiseEvent OnControlTextKeyPress(sender, e) End Sub ''【コンテナのイベントとして発信】 Private Sub TextBox_KeyPress2(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress, TextBox2.KeyPress 'コンテナのイベントとして発信 Me.OnKeyPress(e) End Sub End Class
- 編集済み ChukiMVP 2010年8月17日 7:32 レイアウトの調整と、言葉の修正
- 回答の候補に設定 AzuleanMVP, Moderator 2010年8月17日 13:55
- 回答としてマーク 山本春海 2010年8月18日 4:28
-
すみません、VB でしたね(汗
VB だとこうなります。Public Class UserControl1 Private Sub TextBox1_KeyPress _ (ByVal sender As Object, ByVal e As KeyPressEventArgs) _ Handles TextBox1.KeyPress Me.OnKeyPress(e) End Sub Private Sub TextBox2_KeyPress _ (ByVal sender As Object, ByVal e As KeyPressEventArgs) _ Handles TextBox2.KeyPress Me.OnKeyPress(e) End Sub End Class
ひらぽん http://d.hatena.ne.jp/hilapon/- 回答としてマーク HIDEKUN 2010年8月17日 13:50
すべての返信
-
UserControlにTextBoxを二つ貼り付けます。
この二つのTextBoxボックスどちらでキー入力があっても、KeyPressイベントを受けたいのです。
ところが、キー入力をしても、UserControlのKeyPressイベントは、発生しません。
KeyPressイベントは、発生しないのでしょうか。
UserControl の子コントロールの KeyPress イベントは、そのままコンテナに伝わらないようですね。しかし、以下のように TextBox のKeyPress イベント内で、UserControl の OnKeyPress メソッドを呼び出してイベントを起こす方法もあります。public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { this.OnKeyPress(e); } private void textBox2_KeyPress(object sender, KeyPressEventArgs e) { this.OnKeyPress(e); } }
ひらぽん http://d.hatena.ne.jp/hilapon/ -
すみません、VB でしたね(汗
VB だとこうなります。Public Class UserControl1 Private Sub TextBox1_KeyPress _ (ByVal sender As Object, ByVal e As KeyPressEventArgs) _ Handles TextBox1.KeyPress Me.OnKeyPress(e) End Sub Private Sub TextBox2_KeyPress _ (ByVal sender As Object, ByVal e As KeyPressEventArgs) _ Handles TextBox2.KeyPress Me.OnKeyPress(e) End Sub End Class
ひらぽん http://d.hatena.ne.jp/hilapon/- 回答としてマーク HIDEKUN 2010年8月17日 13:50
-
自分でイベントを定義するか、コンテナのイベントとして打ってくださいな。
Public Class UserControl1 'イベントの定義 Event OnControlTextKeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) ''【自分で定義したイベントをクライアントに送る】 ''以下の特徴、一緒にsenderも送れる Private Sub TextBox_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress, TextBox2.KeyPress '二つのテキストボックスのイベントを同時に受け取るため、 'Handles 以下、二つのイベントを定義 '作成したイベントを発信 RaiseEvent OnControlTextKeyPress(sender, e) End Sub ''【コンテナのイベントとして発信】 Private Sub TextBox_KeyPress2(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress, TextBox2.KeyPress 'コンテナのイベントとして発信 Me.OnKeyPress(e) End Sub End Class
- 編集済み ChukiMVP 2010年8月17日 7:32 レイアウトの調整と、言葉の修正
- 回答の候補に設定 AzuleanMVP, Moderator 2010年8月17日 13:55
- 回答としてマーク 山本春海 2010年8月18日 4:28
-
Private Sub TextBox1_KeyPress _
(ByVal sender As Object, ByVal e As KeyPressEventArgs) _
Handles TextBox1.KeyPress
Me.OnKeyPress(e)
End Sub
Chuki さんが書かれているように、同じ内容のイベントハンドラであればまとめてしまいましょう。
デザイナからであれば、すでに存在するイベントハンドラを選択するだけで良いはずです。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。