我有一个C#WPF应用程序,它有一个登录窗口作为它的启动URI。我想关闭启动窗口,这是用户名和密码组合正确时的登录窗口。
我有这段代码
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()方法,登录窗口仍然可见但不活动。
答案 0 :(得分:2)
更改逻辑:将主窗口设置为启动窗口,然后从主窗口显示登录窗口。检查下面的代码,它是主窗口的构造函数:
...
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
}
答案 1 :(得分:0)
这里缺少的是MainWindow的分配
Application.Current.MainWindow = main;
在创建MainWindow的新实例后,如果为其分配Application.Current.MainWindow(在关闭登录窗口之前),则它有一个主窗口来继续STA线程,并且可以释放LoginWindow线程。
如果这有帮助,请告诉我。