我的表单btnMessage
上有Main
,我也有用户控制权(uc
)。
当我点击btnMessage
时,会打开uc
并生成btnMessage.enabled = false
。在uc
中,有一个名为btnExecute
的按钮。
我想要的是,当我点击btnExecute
中的uc
时,btnMessage
表格中的Main
将被停用。我怎么能这样做?
以下是更新代码:
我正在使用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;
}
说,那个
对象引用未设置为对象的实例(in ucMessageTarget.userFunctionPointer = formFunctionPointer;)。
请帮忙。
答案 0 :(得分:1)
您可以在代码隐藏中以编程方式订阅事件处理程序,因此在“子”表单的按钮的“父”表单中添加一个:
uc.btnExecute.Click += new EventHandler(name_of_method_to_handle_click_event);
唯一的要求是控件为public
,以便父窗体可以访问它。
答案 1 :(得分:0)
我宁愿做的是从主窗体监听的用户控件中引发一个事件,然后在此事件处理程序中禁用该按钮。
像User Control Events in VB and C#
这样的东西这将避免用户控制必须“知道”关于调用者的任何内容(父窗体)。
在SO上搜索一下,你会发现很多从用户控件中引发事件的例子。