none
UserControlのKeyPressイベント RRS feed

  • 質問

  • UserControlにTextBoxを二つ貼り付けます。
    この二つのTextBoxボックスどちらでキー入力があっても、KeyPressイベントを受けたいのです。
    ところが、キー入力をしても、UserControlのKeyPressイベントは、発生しません。
    KeyPressイベントは、発生しないのでしょうか。
    2010年8月17日 6:32

回答

  • 自分でイベントを定義するか、コンテナのイベントとして打ってくださいな。

    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
    2010年8月17日 7:05
  • すみません、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
    2010年8月17日 6:58
    モデレータ

すべての返信

  • 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/
    2010年8月17日 6:52
    モデレータ
  • すみません、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
    2010年8月17日 6:58
    モデレータ
  • 自分でイベントを定義するか、コンテナのイベントとして打ってくださいな。

    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
    2010年8月17日 7:05
  • ひらぽんさん、Chukiさん、回答ありがとうございます。

    OnKeyPress メソッド
    解決しました。
    ありがとうございました。

    2010年8月17日 13:50
  •   Private Sub TextBox1_KeyPress _

          (ByVal sender As Object, ByVal e As KeyPressEventArgs) _

            Handles TextBox1.KeyPress

        Me.OnKeyPress(e)

      End Sub

    Chuki さんが書かれているように、同じ内容のイベントハンドラであればまとめてしまいましょう。
    デザイナからであれば、すでに存在するイベントハンドラを選択するだけで良いはずです。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年8月17日 13:55
    モデレータ
  • Chuki さんが書かれているように、同じ内容のイベントハンドラであればまとめてしまいましょう。
    デザイナからであれば、すでに存在するイベントハンドラを選択するだけで良いはずです。

    ご指摘ありがとうございます。そう言われれば、確かにそうですね(汗

    #余計ですが、知らなかった訳ではないです。

     

     


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年8月18日 5:12
    モデレータ