0

如何在 mdi 类型程序中将公共 bool 从子表单切换为 true?

我有一个名为 logon 的子表单,如果一切正常,我想在 form1(主)表单中将“已验证”布尔值设置为 true

4

3 回答 3

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. 然后,您可以使用相同的事件处理程序来检查属性的值以确定用户是否已通过身份验证。

在任何一种情况下,当您希望父级更新时,您只需从子窗体中引发您的事件。

于 2009-06-30T17:07:17.037 回答
0

Since I noticed you are using a "logon" form you could try the following: set the logon form's DialogResult property according to username/password testing success. I am using username/pass just as an example. On the logon form do something like:

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

And then on the parent form:

LogonForm f = new LogonForm();
if(f.ShowDialog() == DialogResult.OK){
// continue
}
else {
// abort
}
于 2009-07-02T06:13:52.270 回答
0

您可以创建一个全局可访问的变量来保存主窗体,然后在子窗体中使用该变量来调用主窗体上的方法。

或者,您可以将子窗口的适当 Parent 或 Owner 属性转换为适当的主窗体类型,然后从那里开始工作。

于 2009-06-30T17:03:49.863 回答