C# 如何关闭启动窗口
我有一个C#WPF应用程序,它的启动URI是登录窗口。我想关闭启动窗口,当用户名和密码组合正确时,这是登录窗口 我有这个密码C# 如何关闭启动窗口,c#,wpf,C#,Wpf,我有一个C#WPF应用程序,它的启动URI是登录窗口。我想关闭启动窗口,当用户名和密码组合正确时,这是登录窗口 我有这个密码 var username = query.username; var password = query.password; if (userTexbox.Text == username.ToString() && passwordbox.Password == password.ToString()) { var entity = new Lo
var username = query.username;
var password = query.password;
if (userTexbox.Text == username.ToString() && passwordbox.Password == password.ToString())
{
var entity = new Log
{
user = userTexbox.Text,
dateTime = DateTime.Now.ToString()
};
logCollection.Insert(entity);
Mainwindow main = new MainWindow();
this.Close();
}
else
{
MessageBox.Show("User not found/Wrong credentials", "Re-enter Credentials");
}
但即使使用Close()方法,登录窗口仍然可见,尽管未处于活动状态。更改逻辑:将主窗口设置为启动窗口,然后从主窗口显示登录窗口。检查下面的代码,这是主窗口的控制器:
...
public MainWindow()
{
InitializeComponent();
//--init main windows minimized
WindowState = System.Windows.WindowState.Minimized;
Loaded +=
delegate
{
//hide main window
Hide();
//initialize the login window
var loginWin = new LoginWindow
{
WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen,
WindowStyle = System.Windows.WindowStyle.SingleBorderWindow,
};
loginWin.Closed += delegate
{
//check login result (OK)
if (loginWin.Result != LoginResult.Success)
Application.Current.Shutdown(1);
//--display the main window
Show();
WindowState = System.Windows.WindowState.Normal;
Focus();
};
//show&focus the login
loginWin.Show();
loginWin.Focus();
};
}
...
我希望有帮助
编辑
这里是LoginWindow
代码隐藏
public partial class LoginWindow : Window
{
public LoginResult Result { get; private set; }
public LoginWindow()
{
InitializeComponent();
}
private void ButtonLogin_OnClick(object sender, RoutedEventArgs e)
{
//example login button
Result = DoLogin();
Close();
}
private LoginResult DoLogin()
{
//NOTE: Add your login logic here (for now sucess response)
return LoginResult.Success;
}
}
public enum LoginResult
{
Unknow,
Success,
Failed
}
这里缺少的是主窗口的分配
Application.Current.MainWindow = main;
在创建MainWindow的新实例后,如果将Application.Current.MainWindow分配给它(在关闭登录窗口之前),则它有一个主窗口来继续STA线程,并且可以释放LoginWindow线程
如果有帮助,一定要告诉我 您的窗口未关闭的唯一原因可能是Mainwindow构造函数或logCollection.Insert中的某些操作被阻止,因此您的代码实际上从未到达此位置。close(),如果在关闭行上放置断点,您将注意到它从未到达。我不确定loginWin.Result试图暗示什么,它是loginWindow中的变量吗?@fredpedro
loginWin.Result
将存储登录结果,例如:它可以是类似于public Enum LoginResult{Unknown,Failed,Success}的枚举。我希望有帮助。如果你需要更多的帮助,请告诉我。