关闭第一个窗口代码

时间:2017-02-16 08:01:45

标签: c# wpf windows

我在C#中编写WPF应用程序,它有一个主窗口,其中有一个名为" Login"的按钮。如果单击它,将出现带有登录表单的第二个窗口。如果我点击"取消"登录窗口中的按钮,我想要关闭登录窗口,我想返回主窗口。

这是我提出的解决方案。但是,由于Login窗口的实例是在主窗口的ButtonLogin_Click()方法内创建的,并且因为登录窗口的ButtonCancel_Click()方法只会是this.Close()它,如果我单击&#34会发生什么;登录"再次按下主窗口中的按钮?是否会再次显示Login窗口的现有实例,或者每次单击按钮时它是否会创建一个新实例(这显然不是我想要的,因为我最终会有一个Login窗口的实例,如果我单击“登录”按钮n次)?这样做的最佳方式是什么?

Main window

Login window

MainWindow.xaml.cs:

namespace TestTwoWindows
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonLogin_Click(object sender, RoutedEventArgs e)
        {
            Login LoginWindow = new Login();
            LoginWindow.Show();
        }
    }
}

Login.xaml.cs:

namespace TestTwoWindows
{
    public partial class Login : Window
    {
        public Login()
        {
            InitializeComponent();
        }

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

3 个答案:

答案 0 :(得分:0)

你不应该关闭窗口。保留实例并设置其可见性。换句话说,使用这种方法:

    Login LoginWindow;
    private void ButtonLogin_Click(object sender, RoutedEventArgs e)
    {
        if (LoginWindow == null)
        {
            LoginWindow = new Login();
            LoginWindow.Closing += LoginWindow_Closing;
            LoginWindow.Show();
        }
        else
            LoginWindow.Visibility = Visibility.Visible;
    }

    private void LoginWindow_Closing(object sender, CancelEventArgs e)
    {
        e.Cancel = true;
        ((Window)sender).Visibility = Visibility.Hidden;
    }

答案 1 :(得分:0)

以模态打开一个窗口:

LoginWindow.Show(); - > LoginWindow.ShowDialog();

在LoginWindow关闭之前,MainWindow将无法访问

答案 2 :(得分:0)

除了模态对话框,您还可以检查空值并在事件处理程序范围之外声明窗口。

我认为再次点击按钮或在取消登录后再次打开时重新激活登录窗口会更好

    LoginWindow LoginWindow;
    private void ButtonLogin_Click(object sender, RoutedEventArgs e)
    {
        if (LoginWindow == null)
        {
            LoginWindow = new LoginWindow();
            LoginWindow.Closed += Window_Closed;
            LoginWindow.Show();
        } else
        {
            LoginWindow.Activate();
        }
    }

并在关闭时再次将其设置为null

    private void Window_Closed(object sender, EventArgs e)
    {
        LoginWindow = null;
    }