3

私はUser Controlたくさんのコントロールを含んでいます。User Controlこれのデフォルトのイベントをボタンの 1 つのイベントに設定したいと考えてClickいます。

デフォルトのイベントを UserControl のイベントの 1 つに設定することを知っています。属性を追加する必要があります。

[DefaultEvent("Click")]
public partial class ucPersonSearch : UserControl
...

次のようなことができるかどうか疑問に思っています:

[DefaultEvent("btn1_Click")]
public partial class ucPersonSearch : UserControl
...

btn1 がクリックされたときに、このユーザー コントロールをホストするフォームでいくつかのメソッドを起動したいと考えています。

これは本当に私のプロジェクトのニットであり、あなたの答えは価値があります.

4

1 に答える 1

12

クラス メンバーのイベントをクラスの外部に公開することはできません。他のユーザーがあなたの 内のClickイベントをサブスクライブするにはどうすればよいですか? 試してみましたか?ボタンを外部からアクセスできるようにしない限り、それは不可能です。これは良くありません (誰もがすべてのプロパティを変更できます)。ButtonUserControl

新しいイベントを定義し、目的のイベント (ボタンをクリック) が発生したときに新しいイベントを発生させる必要があります。

[DefaultEvent("MyClick")]
public partial class UCPersonSearch : UserControl
{
    Button btnSearch;
    public event EventHandler MyClick;

    public UCPersonSearch()
    {
        btnSearch = new Button();
        //...

        btnSearch.Click += new EventHandler(btnSearch_Click);
    }

    void btnSearch_Click(object sender, EventArgs e)
    {
        OnMyClick();
    }

    protected virtual void OnMyClick()
    {
        var h = MyClick;
        if (h != null)
            h(this, EventArgs.Empty);
    }
}
于 2013-02-19T11:51:23.470 に答える