Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Запуск одного окна один раз

#c_sharp #wpf


Как сделать, чтобы нельзя было открыть окно, если оно уже открыто?
    


Ответы

Ответ 1



Очень просто. Создаёте переменную boolean Boolean WindowOpened = false; При запросе на открытие окна проверяете, равна ли переменная false, если равна - открываете окно и присваиваете переменной значение true: if(!WindowOpened){ OpenWindow(); WindowOpened = true; }

Ответ 2



Вы можете сделать базовый класс для всех окон. В нем создать свойство, которое будет отвечать за состояние окна и изменять его в зависимости от Открытия/Закрытия. Все окна унаследовать от него. Второй способ отсюда: public static bool IsWindowOpen(string name = "") where T : Window { return string.IsNullOrEmpty(name) ? Application.Current.Windows.OfType().Any() : Application.Current.Windows.OfType().Any(w => w.Name.Equals(name)); } использовать так: if (Helpers.IsWindowOpen()) { }

Ответ 3



Для WPF можно проверить следующим образом: public void OpenNewWindow(object sender, RoutedEventArgs e) { foreach (Window win in Application.Current.Windows) { // Окно закрыто - открываем if ((win.IsLoaded == false) && (win.Title == Window2.Title)) { Window2.Owner = Window.GetWindow(this); Window2.Show(); return; } } // Окно открыто - действуем по необходимости }

Ответ 4



Создаете в коде главной формы переменную public static bool peremennaya; Устанавливаете эвент на загрузку главной формы(Делается из окна редактора как на картинке) После двойного шелчка вас кинет в код формы там задаете в эвенте значение этой переменной private void MainForm_Load(object sender, EventArgs e) { //Код нашей переменной peremennaya = false; } После переходим к дочернему окну задаем эвент FormClosing после чего пишем туда MainForm.peremennaya = true; "MainForm"-Это название нашего главного окна где мы задали переменную. После создаем эвент кнопки (кликая по ней 2 раза) и пишем следующее ChildWindow child = new ChildWindow(); if (peremennaya == false) { child.Show(); } else if (peremennaya == true) { MessageBox.Show(Convert.ToString("Не удалось открыть форму")); } "ChildWindow"-Это дочернее окно открываемого из главного "MainForm". У меня лично это работает при том что у меня для запуска этого окна есть еще и условия, я просто при несоответствии условиям оставлял переменную как false.

Комментариев нет:

Отправить комментарий