Закрытие всех windows и открытие еще одного в WPF - PullRequest
0 голосов
/ 17 апреля 2020

, поэтому у меня есть три windows в моем приложении 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();
    }

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Не делайте выход из окна выхода. Просто используйте окно выхода из системы, чтобы получить ответ от пользователя, а затем выполните выход (или нет) из главного окна.

Из главного окна:

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;
}
1 голос
/ 17 апреля 2020

Итак, ответ на этот вопрос состоял в том, что мне нужно было добраться до главного окна, которое вызывает окно подтверждения выхода, чтобы всплыть и закрыть его вместе с ним, вот код

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 в конструкторе главного окна, чтобы оно иногда не возвращало ноль

public MainWindow()
    {
        Application.Current.MainWindow = this;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...