1

重複の可能性:
ユーザー コントロールから親コントロールへのアクセスを取得する - C#

btnMessageフォームに がMainあり、ユーザー コントロール ( uc) もあります。

をクリックbtnMessageすると、 が開き、ucも作成されbtnMessage.enabled = falseます。にはuc、 というボタンがありますbtnExecute

私が欲しいのは、 in をクリックするbtnExecuteucin btnMessageformMainが無効になることです。どうすればこれを行うことができますか?

更新コードは次のとおりです。

関数を使用していますmain.cs

    public Main()
    {
        InitializeComponent();
        formFunctionPointer += new functioncall(buttonHideorEnabled);
        ucMessageTarget.userFunctionPointer = formFunctionPointer;
    }

    public delegate void functioncall(bool _status);

    private event functioncall formFunctionPointer;

    public void buttonHideorEnabled(bool _status)
    {
        btnMessageTarget.Enabled = _status;
    }

とでuc.cs

    public static string agentName = UtilitiesToolkit.agentMessageTarget;
    public static string strn;

    public UcMessageTarget(string str)
    {
        InitializeComponent();
        strn = str;
    }

    public Delegate userControlPointer;
    public Delegate userFunctionPointer;
    private void btnExecute_Click(object sender, EventArgs e)
    {
       btnExecute.enabled = false;
       userFunctionPointer.DynamicInvoke(false);
       //I want btnMessage in Main form also disabled, please tell me how
    }

しかし、それでもうまくいきませんでした。コンパイルすると、メインの次の行にエラーがあります:

    public Main()
    {
        InitializeComponent();
        formFunctionPointer += new functioncall(buttonHideorEnabled);
        ucMessageTarget.userFunctionPointer = formFunctionPointer;
    }

と言いました

オブジェクト参照がオブジェクトのインスタンスに設定されていません (ucMessageTarget.userFunctionPointer = formFunctionPointer; 内)。

助けてください。

4

2 に答える 2

1

コード ビハインドでイベント ハンドラーをプログラムでサブスクライブできるため、「子」フォームのボタンの「親」フォームにイベント ハンドラーを追加します。

uc.btnExecute.Click += new EventHandler(name_of_method_to_handle_click_event);

唯一の要件はpublic、親フォームがコントロールにアクセスできるようにすることです。

于 2012-10-23T04:41:59.980 に答える
0

私がしたいことは、メイン フォームがリッスンするユーザー コントロールからイベントを発生させ、このイベント ハンドラーでボタンを無効にすることです。

VB や C# のユーザー コントロール イベントのようなもの

これにより、ユーザー コントロールが呼び出し元 (親フォーム) について「知る」必要がなくなります。

SO を少し検索すると、ユーザー コントロールからイベントを発生させる例がたくさん見つかります。

于 2012-10-23T04:35:39.220 に答える