C# 通过访问控制在窗体中启用按钮

C# 通过访问控制在窗体中启用按钮,c#,winforms,C#,Winforms,可能重复: 我的表单Main上有btn消息,我还有用户控件(uc) 当我单击btnMessage时,它会打开uc,并使btnMessage.enabled=false。在uc中,有一个名为btnExecute的按钮 我想要的是,当我点击uc中的btnExecute时,Main表单中的btnMessage将被禁用。我怎么能做到 以下是更新代码: 我正在使用main.cs中的函数 public Main() { InitializeComponent();

可能重复:

我的表单
Main
上有
btn消息
,我还有用户控件(
uc

当我单击
btnMessage
时,它会打开
uc
,并使
btnMessage.enabled=false
。在
uc
中,有一个名为
btnExecute
的按钮

我想要的是,当我点击
uc
中的
btnExecute
时,
Main
表单中的
btnMessage
将被禁用。我怎么能做到

以下是更新代码:

我正在使用
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
    }
但是,仍然没有起作用。当我编译时,我的main中有一个错误,在这一行:

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

对象引用未设置为对象的实例(在 ucMessageTarget.userFunctionPointer=formFunctionPointer;)


请提供帮助。

我更愿意做的是从主窗体侦听的用户控件引发事件,然后禁用此事件处理程序中的按钮

差不多

这将避免用户控件必须“知道”有关调用方(父窗体)的任何信息


稍微搜索一下,您会发现许多从用户控件引发事件的示例。

我更愿意从主窗体侦听的用户控件引发事件,然后禁用此事件处理程序中的按钮

差不多

这将避免用户控件必须“知道”有关调用方(父窗体)的任何信息


稍微搜索一下,您会发现许多从用户控件引发事件的示例。

您可以在代码隐藏中以编程方式订阅事件处理程序,因此请在“父”窗体中为“子”窗体的按钮添加一个事件处理程序:

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

唯一的要求是控件必须是公共的,以便父窗体可以访问它。

您可以通过编程方式订阅代码隐藏中的事件处理程序,因此在“父”窗体中为“子”窗体的按钮添加一个事件处理程序:

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

唯一的要求是控件必须
public
,以便父窗体可以访问它。

在uc中单击btnExecute时,如何使btnMessage enabled=false?在uc中单击btnExecute时,如何使btnMessage enabled=false?在uc中单击btnExecute时,如何使btnMessage enabled=false?如何使当我在uc中单击btnExecute时,btnMessage enabled=false?