0

我的问题涉及以下 3 种形式:

MainWindow.cs
SettingsWindow.cs
AuthenticationWindow.cs

设置窗口包含诸如“是否在启动期间询问密码”之类的信息。

我从设置窗口调用身份验证窗口以删除密码(设置密码时)。

我也在启动期间(设置密码时)调用身份验证窗口。

我的身份验证窗口使用静态变量与设置窗口交互(说明身份验证是否成功)。

但是,为了重用相同的代码(即在启动过程中调用相同的认证窗口),我无法告诉 MainWindow 认证是否成功。但是,我必须了解如何重用代码。

我的问题是:是否可以通知子窗口父窗口是谁?如果是,请提供示例代码...

希望我的问题很清楚。

请帮忙!

4

2 回答 2

0
ChildWindow c1=new ChildWindow();
c1.Owener=authenticationWindow;
c1.Show();  //or ShowDialog();

ChildWindow c2=new ChildWindow();
c1.Owener=anotherWindow;
c2.Show();  //or ShowDialog();

//to get the parent, use the property c.Owner
if(c.Owner is AuthenticationWindow)  //AuthenticationWindow is the type of authenticationWindow instance
{
 ...
}
于 2013-03-30T11:20:26.933 回答
0

我假设身份验证窗口与 ShowDialog() 一起使用,如下所示:

AuthenticationWindow auth = new AuthenticationWindow();
if (auth.ShowDialog(this) == DialogResult.Ok)
{
    // we know it was successful
}

然后在AuthenticationWindow你取得成功后,你会打电话给:

       DialogResult = DialogResult.Ok;
       Close();

获得上面的反馈,或者表示它失败了

       DialogResult = DialogResult.Cancel;
       Close();

或者,您可以在 AuthenticationWindow 上设置一个属性:

class AuthenticationWindow : Form
{
     public bool Success { get; set;}


}

并在 AuthenticationWindow 代码中适当地设置 Success 的值。


最后,如果您希望立即将反馈发送到您的其他窗口,请考虑实施一个事件:

class AuthenticationWindow : Form
{
     public event Action<bool> SignalOutcome;

     private OnSignalOutcome(bool result)
     {
          Action<bool> handler = SignalOutCome;
          if (handler != null) handler(result);
     }
}

然后,您将必须订阅调用身份验证窗口的该事件:

AuthenticationWindow auth = new AuthenticationWindow();
auth.SignalOutcome += (outcome) => { /* do something with outcome here */ };

auth.ShowDialog(this);
于 2013-03-30T11:22:43.570 回答