カスタムコントロールにコンボボックスがあります。 SelectedIndexChangedやKeyPressなどの特定のイベントを、カスタムコントロールを実装している人に公開するにはどうすればよいですか?
次のようにイベントを転送できます。
public event EventHandler SelectedIndexChanged
{
add { inner.SelectedIndexChanged += value; }
remove { inner.SelectedIndexChanged -= value; }
}
これらを自分でコントロールにコーディングする必要があります。ユーザーコントロールは、子コントロールのイベントを自動的にプロモートしません。次に、実際のコントロールをユーザーコントロールのプロモートイベントに相互接続できます。
public event EventHandler SelectedIndexChanged;
private void OnSelectedIndexChanged(object sender, EventArgs e)
{
if (SelectedIndexChanged != null)
SelectedIndexChanged(sender, e);
}
public UserControl1()
{
InitializeComponent();
cb.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);
}
残念ながら、興味のあるすべてのイベントに対してこれを行う必要があります。
カスタムイベントを使用するのではなく、非常に単純な解決策は、ネストされたコントロールをカスタムコントロールのプロパティとして公開することです。そこから、イベントハンドラーを非常に簡単にアタッチできます。子コントロールを公開することは常に推奨されるわけではありませんが、コントロールの種類とその使用方法によっては、機能する場合があります。
//create an instance of my control
MyCustomControl controlInstance = new MyCustomControl();
//attach and event handler to the exposed subcontrol
controlInstance.SaveButton.Click += new EventHandler(SaveButton_Click);
デザイナーを通じてそれを処理する別の方法があります:
デザイナのカスタムコントロールで、[デザイン]の下のコンボボックスプロパティで[モディファイア]を内部に設定します。
次に、それについて何かをする必要がある場所に追加します:
CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged;
に加えて :
private void YourCombo_SelectedIndexChanged(object sender, EventArgs e)
{
// Code to execute when the SelectedIndexIsChanged goes here
}