1. ホーム
  2. c#

[解決済み] ユーザーコントロールでイベントを作成し、メインフォームで処理させるには?

2023-07-24 01:59:35

質問

カスタムユーザコントロールを持っていて、比較的簡単なことをしたいのですが、どうすればいいですか?

そのusercontrolの数値の上下の値が変わるたびに、メインフォームに表示ウィンドウを更新させる。

NUDがusercontrolになければ問題ないのですが、usercontrolではなくmainformでイベントを処理させる方法がわからないようです。

どのように解決するのですか?

ユーザーコントロールのイベントハンドラを作成し、ユーザーコントロール内からのイベントが発生したときに、そのイベントを発生させる必要があります。これにより、イベントをチェーン上にバブル化し、フォームからのイベントを処理することができます。

をクリックすると Button1 をクリックすると Button1_Click をトリガーします。 UserControl_ButtonClick をトリガーします。

ユーザーコントロールの

[Browsable(true)] [Category("Action")] 
[Description("Invoked when user clicks button")]
public event EventHandler ButtonClick;

protected void Button1_Click(object sender, EventArgs e)
{
    //bubble the event up to the parent
    if (this.ButtonClick!= null)
        this.ButtonClick(this, e);               
}

フォーム

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick);

protected void UserControl_ButtonClick(object sender, EventArgs e)
{
    //handle the event 
}

注意事項

  • 新しいバージョンの Visual Studio では if (this.ButtonClick!= null) this.ButtonClick(this, e); を使用することができます。 ButtonClick?.Invoke(this, e); を使うこともできます。これは基本的に同じことをしますが、より短くなります。

  • Browsable 属性は、Visual Studio のデザイナー (イベントビュー) でイベントを表示できるようにします。 Category はそれを "アクション" カテゴリに表示し、そして Description はそれのための説明を提供します。これらの属性を完全に省略することもできますが、デザイナーが利用できるようにすると、VSが処理してくれるので、より快適です。