2016-05-28 3 views
1

Я создаю проект WPF на основе C#. Во время работы над моим проектом я столкнулся с некоторыми проблемами в том, как создать одно окно экземпляра (например, если я хочу открыть окно X, его нельзя открыть снова, если он не закрыт). Я нашел много статей в Интернете, но им показалось, что это очень много работы, что было проще просто отключить кнопку, когда окно открыто и включить ее, когда окно закрыто.C# WPF Создание окна

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

Решение показано ниже.

public partial class MainWindow : Window 
    { 
     Window1 wndw = new Window1(); 

     public MainWindow() 
     { 
      InitializeComponent(); 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      if (!wndw.IsActive) 
      wndw.Show(); 
     } 
    } 
} 

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

Если я следую последнему методу, будут ли загружены все окна при создании MainWindow или будут ли компоненты загружаться только при запуске события window1.show()?

Спасибо за вашу поддержку

+0

Дорогой, кнопка расположена в главном окне, которое отображается , Когда он будет нажат, откроется новое окно, называемое здесь wndw типа Window1. Моя проблема в том, что если я использую wndw.show(), я могу вернуться к главному окну и снова нажать кнопку, которая откроет еще один новый wndw типа Window1 – Nassif

+0

Umm, обычно вы просто перегружаете событие Close и скрываете окно вместо того, чтобы разрешить его закрытие. –

+0

Я добавил глобальный логический параметр на вкладке настроек свойств, который будет истинным, если окно открыто. Если этот параметр верен, окно не открывается. В событии закрытия окна i устанавливается значение false. Единственным недостатком является то, что для каждого отдельного окна мне нужно создать параметр. – Nassif

ответ

1

Это, как я сделал бы это:

код MainWindow:

Window1 window1 = null; // global reference var 

private void btnOpenWin1_Click(object sender, RoutedEventArgs e) 
{ 
    if (window1 == null) 
    { 
     window1 = new Window1(); 
     window1.Closed += Window1_Closed; // register event to detect when Window1 closed 
     window1.Show(); 
    } 
    else 
    { 
     window1.Focus(); 
    } 
} 

// register event to remove Window1 ref to be able to open it again 
private void Window1_Closed(object sender, EventArgs e) 
{ 
    window1 = null; 
} 
Смежные вопросы