Я бы не стал менять свой собственный флаг и управлять его настройкой вручную. Например, если пользователь закрывает окно, как вы меняете обратно переменную, чтобы снова открыть окно настроек ?. По этой проблеме существует более надежный системный подход. Глядя на предоставленную системой информацию, вы сможете не открывать второй раз окно настроек, пока не будет открыт один экземпляр.
Чтобы проверить, есть ли уже экземпляр SettingsWindow открыть, вы можете использовать информацию, предоставляемую систему с кодом, как этот
private void Button_Click(object sender, RoutedEventArgs e)
{
// Check if, in the Application.Current.Windows collection
// there is at least one window of type SettingsWindow
SettingsWindow w = Application.Current.Windows
.OfType<SettingsWindow>()
.FirstOrDefault();
if(w == null)
{
// No window of the type required, open a new one....
w = new SettingsWindow();
w.Owner = System.Windows.Application.Current.MainWindow;
w.WindowStartupLocation = WindowStartupLocation.CenterOwner;
w.Top = this.Top + 20;
}
// Show it NON MODALLY....
w.Show();
}
Призыв к Show
возвращается немедленно (не модальна) и, таким образом, ваша программа продолжит как обычно, при включенном MainWindow.
Вместо этого, если вы хотите использовать модальный подход (это означает, что до тех пор, пока SettingsWindow
не будет открыт в вашем MainWindow, вы можете просто создать SettingsWindow, установить его владельца и, в конечном итоге, его позицию и, наконец, позвонить ShowDialog
(не забывайте для установки свойства Owner). Таким образом, ваш код блокируется в ShowDialog и не возвращается, пока пользователь не закрывает только что открытый экземпляр SettingsWindow. (И вы можете удалить все проверки выше)
Winform или ASP.NET? Что вы пытаетесь сделать BTW? – Rahul
с использованием WPF в визуальной студии C# – Tjarda112
Вы создаете две копии 'SettingsWindow', вы, вероятно, не хотите, чтобы –