Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Способ 1






  • В классе Window1 найдите объявление поля wnd2 (строка: Window wnd2;), щелкните на поле wnd2 правой кнопкой мыши и выполните команду контекстного меню Refactor/Encapsulate Field

Появится окно Encapsulate Field, предлагающее обернуть поле в общедоступное свойство с именем Wnd2

 

  • Скажите OK и оболочка создаст следующий код свойства
public static Window Wnd2{ get { return Window1.wnd2; } set { Window1.wnd2 = value; }}

Аксессор get нам не нужен, поскольку в клиенте Window2 при закрытии окна мы будем поле wnd2 только обнулять через свойство Wnd2, поэтому get следует удалить.

  • Внесите в класс Window1 следующий окончательный код реализации первого способа
// Предотвращение повторного открытия окна: Способ 1static Window wnd2; public static Window Wnd2{ set { Window1.wnd2 = value; }}// Обработчик двойного щелчкаprivate void Show_Window2(object sender, MouseButtonEventArgs e){ if (wnd2 == null) { wnd2 = new Window2(); wnd2.Show(); } else wnd2.Activate(); // Сдвинуть на передний план}
  • Модифицируйте класс Window2 следующим образом
public partial class Window2: Window{ public Window2() { // Инициализация разметочной части InitializeComponent(); // Корректировка заголовка окна this.Title += " =\" Так голодают буржуины! \" "; // Дочернее окно не отображать в панели задач ОС this.ShowInTaskbar = false; // Регистрация обработчика this.Closed += new EventHandler(Window2_Closed); } private void Window2_Closed(object sender, EventArgs e) { Window1.Wnd2 = null; // Для предотвращения повторного запуска GC.WaitForFullGCComplete(); // Ждать завершения сборки мусора GC.Collect(); // Начать сборку мусора }}

Здесь мы немного перестарались и ввели еще принудительный вызов сборщика мусора. Это необязательно, так как запуск механизма освобождения брошенных ссылок активизирует сама среда исполнения и в том случае, когда заканчивается выделенная домену приложения оперативная память.

  • Запустите приложение и убедитесь, что обработчик создания дочернего окна по двойному щелчку теперь работает правильно

Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал