我有一个名为MainBackground的父窗体和一个名为LoginUI的用户控件。 LoginUI停靠在MainBackground中。
我需要将位于父窗体中的按钮(InfoButton)的可用性更改为" true"当用户点击按钮时#34;登录"在控制表格中。
但我无法访问父按钮的属性。
控制表格的按钮点击事件代码:
customMouseOver(e){
return (
<div className="customMouseOver">
//e hold the line data in payload element
</div>
);
}
我尝试使用父控件解决它,但它似乎仍然无法正常工作。
感谢您的帮助!
答案 0 :(得分:0)
您无法从MainBackground.infoButton
访问LoginUI
,因为infoButton不是static。
要解决这个问题,你可以通过如下例子
之类的属性注入MainBackgroundpublic partial class LoginUI : UserControl
{
public MainBackground MainBackground { get; set; }
...
}
<{>>在MainBackground
中,您应该将LoginUI.MainBackground
属性归为一类
loginUI1.MainBackground = this;
确保公开infoButton
通过将修饰符属性设置为public
现在您可以访问MainBackground.loginUI1
private void login_Click(object sender, EventArgs e)
{
MainBackground.InfoButton.Enabled = true;
}
答案 1 :(得分:0)
按下MainBackground
按钮时,启用InfoButton
表单Login
的问题中描述的方法是一项常见操作。但是,不是直接绑定LoginUI控件现在永远绑定到MainBackground表单的两个项目,而是应该使用事件将两者分开。
LoginUI控件应该发布一个事件,可能称为LoginClicked
。然后,MainBackground表单可以订阅此事件并执行单击“登录”按钮时所需的任何操作。
在LoginUI控件中,声明一个事件:
public event EventHandler LoginClicked;
并且,只要按下“登录”按钮,就将其抬起:
private void login_Click(object sender, EventArgs e)
{
OnLoginClicked(EventArgs.Empty);
}
protected virtual void OnLoginClicked(EventArgs e)
{
EventHandler handler = LoginClicked;
if (handler != null)
{
handler(this, e);
}
}
最后,在MainBackground表单类中,订阅LoginClicked事件
loginUI.LoginClicked += this.loginUI_LoginClicked;
像这样处理LoginClicked事件:
private void loginUI_LoginClicked(object sender, EventArgs e)
{
InfoButton.Enabled = true;
}