如何关闭启动窗口

时间:2015-03-29 17:28:39

标签: 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 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()方法,登录窗口仍然可见但不活动。

2 个答案:

答案 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线程。

如果这有帮助,请告诉我。