Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何关闭启动窗口_C#_Wpf - Fatal编程技术网

C# 如何关闭启动窗口

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

我有一个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()方法,登录窗口仍然可见,尽管未处于活动状态。

更改逻辑:将主窗口设置为启动窗口,然后从主窗口显示登录窗口。检查下面的代码,这是主窗口的控制器:

...
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}的枚举。我希望有帮助。如果你需要更多的帮助,请告诉我。