2011-11-01 83 views
0

请有人告诉我将使用的技术,用于以下场景。触发方法取决于第二个窗口上的动作

我想在验证用户身份之前,允许我的代码执行其他操作。

我有一个方法,打开一个包含我的身份验证表单(用户名和密码)的新窗口。

private bool userLogin() 
    { 
     Window loginInterface = new Window() 
     { 
      Title = "Please Login", 
      Content = new login(), 
      Height = 282, 
      Width = 300, 
      ResizeMode = ResizeMode.NoResize, 
      WindowStartupLocation = WindowStartupLocation.CenterOwner 

     }; 

     loginInterface.Owner = this; 

     loginInterface.ShowDialog(); 

     return true; 

    } 

我调用此方法像这样,在按一下按钮:

private void perform_action(object sender, RoutedEventArgs e) 
    { 
     if (!userLogin()) 
     { 
      // Failed login, do nothing 
     } 
     else 
     { 
      // Authentication successful, perform action 
      delete_item(); 
     } 
    } 

的窗口打开正常,但我怎么能现在让我的方法的返回true或false基础上,用户什么在打开的表单上呢?

所以,当用户点击名为login_button的登录按钮时,我的代码已经验证了凭据,但我需要发回'bool'值。

我可以让我的第一个窗口几乎等待一个动作在另一个窗口上执行并获得响应吗?

回答

1

Window.ShowDialog()方法实际上已经返回bool?。可以通过设置(例如)this.DialogResult = true来设置Window中的任意点。然后可以关闭该窗口并从调用代码中访问该值。

要与结果关闭窗口:

this.DialogResult = true; 

...然后使用该结果在调用代码:

var myWindow = /*create window*/; 
var result = myWindow.ShowDialog(); 
if (result == true) 
{ 
    //... 
} 
+0

1'Close'是没有必要的2'结果'是可空的,所以声明不会像这样工作 –

+1

好点 - 谢谢 –

+0

谢谢!起初我遇到了麻烦,因为我把Window设置为UserControl。一旦我改变了,我就可以访问DialogResult变量。 – Luke

0

要关闭登录屏幕,您可以将DialogResult设置为true或false,并且ShowDialog返回此值。对于其他事情,您可以在第二个窗口上创建events,并在第一个窗口上订阅它们。

0

userLogin应该返回非true的内容。

我会做这样的事情(根据显示的代码):

return loginInterface.WasSuccessful; // you'd have to add this property