2012-10-23 97 views
1

可能重复:
Get access to parent control from user control - C#通过访问控制中启用表单按钮

我有我的btnMessage形式Main上,我也有用户控件(uc)。

当我点击btnMessage时,它将打开uc并且还使btnMessage.enabled = false。在uc中,有一个按钮叫做btnExecute

我想要的是当我点击btnExecuteuc,btnMessageMain表格将被禁用。我如何做到这一点?

这里的更新代码:

我使用功能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; )。

请大家帮忙。

回答

0

我宁愿做的事情是从主窗体监听的用户控件中引发一个事件,然后禁用此事件处理程序中的按钮。

喜欢的东西User Control Events in VB and C#

这将避免不必“知道”关于调用者(父窗体)任何用户控制。

在SO上搜索一下,您会发现很多用于从用户控件中引发事件的示例。

+0

当我单击uc中的btnExecute时,如何让btnMessage enabled = false? –

1

可以通过编程方式订阅事件处理程序的代码隐藏,所以加一个“父”的形式,为“孩子”的形式的按钮:

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

唯一的要求是,控制是public以便父表单可以访问它。

+0

当我点击uc中的btnExecute时,如何启用btnMessage = false? –