如何从mdi类型程序中的子表单中将公共bool切换为true?
我有一个名为logon的子表单,如果一切都检出我想在form1(main)表单中将“authenticated”bool设置为true
答案 0 :(得分:3)
正确的OO做事方式是在您的子表单上公开父级可以附加的事件。如果您让子表格对其MdiParent
做出假设,则表示您违反了您的问题分离。
例如,一个非常简单的方法就是在你的孩子形式上做这个:
public event EventHandler Authenticated;
父母打开它的时间......
YourForm newForm = new YourForm();
newForm.Authenticated += new EventHandler(newForm_Authenticated);
newForm.MdiParent = this;
// and so on
通过在子表单中添加Authenticated
布尔属性,您可以稍微复杂一些(我的意思是略有意义),并将事件重命名为AuthenticatedChanged
。然后,您可以使用相同的事件处理程序来检查属性的值,以确定用户是否已经过身份验证。
在任何一种情况下,只需在父级更新时从子表单中提升事件即可。
答案 1 :(得分:0)
您可以创建一个包含主窗体的全局可访问变量,然后在子窗口中使用该变量来调用主窗体上的方法。
或者,您可以将子窗口的相应Parent或Owner属性强制转换为主窗体的正确类型,并从那里开始工作。
答案 2 :(得分:0)
由于我注意到您使用的是“登录”表单,因此可以尝试以下操作:根据用户名/密码测试成功设置登录表单的DialogResult属性。我使用username / pass作为示例。 在登录表单上执行以下操作:
if(isMatch(username, password)){
this.DialogResult=DialogResult.OK;
this.Close();
}
else MessageBox.Show("Logon error - try again!");
// or anything else you would like to do in case of an error
然后在父表格上:
LogonForm f = new LogonForm();
if(f.ShowDialog() == DialogResult.OK){
// continue
}
else {
// abort
}