【问题标题】:Closing all windows and opening another one in WPF在 WPF 中关闭所有窗口并打开另一个窗口
【发布时间】:2020-04-16 21:22:45
【问题描述】:

所以我的 WPF 应用程序中有三个窗口,一个登录窗口、一个主窗口和一个确认注销窗口。 确认注销窗口有两个按钮是和否,当用户单击否按钮时,窗口会关闭,但是当用户单击是按钮时,我希望主窗口和确认注销窗口关闭并登录窗口被显示出来。

问题是代码可以正常工作,但是当我关闭注销确认窗口时,主窗口并没有随之关闭

这是我的代码

    private void NoButton_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

    private void YesButton_Click(object sender, RoutedEventArgs e)
    { 
        try
        {
            Properties.Settings.Default.UserName = null;
            Properties.Settings.Default.UserPassword = null;
            Properties.Settings.Default.Save();
        }
        catch (Exception exp)
        {
            Console.WriteLine(exp);
        }

        this.Hide();
        Window loginWindow = new Login();
        loginWindow.Show();
        this.Close();
    }

【问题讨论】:

  • 我会使用ShowDialog() 而不是Show() 来制作登录/注销窗口模式。您的程序流程将更具结构化/可读性。
  • @JeroenvanLangen 我试过了,没用,问题是代码可以正常工作,但是当我关闭注销确认窗口时,主窗口并没有随之关闭
  • 好的,我试试
  • 你是说我应该检查注销确认窗口是否关闭,主窗口是否随之关闭?如果用户按下否按钮怎么办?因为我试过了,但它没有工作主窗口仍在显示
  • @JeroenvanLangen 我找到了答案,我会在几分钟内发布,谢谢大佬

标签: c# wpf windows


【解决方案1】:

所以这个问题的答案是我需要到达调用注销确认窗口的主窗口才能弹出并关闭它,这是代码

private void YesButton_Click(object sender, RoutedEventArgs e)
{ 
    try
    {
       Properties.Settings.Default.UserName = null;
       Properties.Settings.Default.UserPassword = null;
       Properties.Settings.Default.Save();
    }
    catch (Exception exp)
    {
       Console.WriteLine(exp);
    }

    this.Hide();
    Window mainWindow = Application.Current.MainWindow;
    mainWindow.Close();
    Window loginWindow = new Login();
    loginWindow.ShowDialog();
    this.Close();
}

请记住,您需要在主窗口构造函数中设置 Application.Current.MainWindow 值,以便它有时不会返回 null

public MainWindow()
    {
        Application.Current.MainWindow = this;
    }

【讨论】:

    【解决方案2】:

    不要从注销窗口注销。只需使用注销窗口从用户那里获得响应,然后在主窗口中执行注销(或不注销)。

    从主窗口:

    if(logoutWindow.ShowDialog() == true)
    {
        try
        {
           Properties.Settings.Default.UserName = null;
           Properties.Settings.Default.UserPassword = null;
           Properties.Settings.Default.Save();
        }
        catch (Exception exp)
        {
           Console.WriteLine(exp);
        }
        ...
        //open login, close this etc.
    }
    

    在退出对话框中

    private void YesButton_Click(object sender, RoutedEventArgs e)
    { 
        DialogResult = true;
    }
    
    private void NoButton_Click(object sender, RoutedEventArgs e)
    { 
        DialogResult = false;
    }
    

    【讨论】:

    • 非常感谢您的回答,实际上很有道理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多