57209


お世話になります。  
現在、下記のようにリストボックスを継承したクラスを作成しようとしているのですが、イベントの拾い方がわからずに困っています。  
最初はOnXXXでイベントをオーバーライドしようと思ったんですが、これだとオーバーライドしたメソッドがすべてを代わりにやらないといけないようなので、自分のイベント処理だけを加えようと思っています。  
しかし、その方法がわからずにいるため、やり方を教えていただけないでしょうか。  
一応実際に書いてみたソースを貼り付けておきます。

[code]

    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class テストリストボックス : ListBox{
    public テストリストボックス(){
    KeyDown += keyDown;
    }
    
    protected override void keyDown(KeyEventArgs e){
    if ((e.KeyData & Keys.KeyCode) == Keys.Space){
    MessageBox.Show("スペースが押されました。");
    }
    }
    }
    
[/code]

以上、よろしくお願いいたします。


CC BY-SA 4.0
2019-08-07T01:43:44.857
57208
2019-08-07T02:29:21.820
29034
question
c#
フォーム部品を継承したクラスでイベントを拾う方法


[base.OnKeyDown](https://docs.microsoft.com/ja-
jp/dotnet/framework/winforms/controls/handling-user-
input)で基底クラスの処理を呼び出すコードで対応可能ではないでしょうか。

コンポーネント クラスを新規作成し、コードを書き換えた例:

[code]

    using System.ComponentModel;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class MyListBox : ListBox
        {
            public MyListBox()
            {
                InitializeComponent();
            }
    
            public MyListBox(IContainer container)
            {
                container.Add(this);
    
                InitializeComponent();
            }
    
            protected override void OnKeyDown(KeyEventArgs e)
            {
                base.OnKeyDown(e);
                if ((e.KeyData & Keys.KeyCode) == Keys.Space)
                {
                    MessageBox.Show("スペースが押されました。");
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2019-08-07T02:29:21.820
57209
2019-08-07T02:29:21.820
9820
57208
answer