2015-11-17 6 views
0

Привет, ниже упрощенный код. Странно, что окно остается на втором мониторе в расколе секунды, а затем возвращается к первому главному монитору. Должна быть установка окна или внешняя программа. Потому что тот же код работает на компьютере ДРУГОЙ с двойным экраном. И я уверен, и дважды проверял, что второй монитор находится в индексе 1: showOnMonitor (1, Q);C#: Окно переходит на второй монитор, затем возвращается обратно на главный монитор.

Q = new queue(); 
showOnMonitor(1, Q); 
Q.Show(); 

public static void showOnMonitor(int monitor, Window w2) 
     { 
      Screen[] sc; 
      sc = Screen.AllScreens; 

      if (monitor >= sc.Length) 
      { 
       monitor = 0; 
      } 


      w2.WindowStartupLocation = WindowStartupLocation.Manual; 

      var workingArea = sc[monitor].WorkingArea; 
      w2.Left = workingArea.Left; 
      w2.Top = workingArea.Top; 
      w2.Width = workingArea.Width; 
      w2.Height = workingArea.Height; 

     } 
+0

Нарушение showOnMonitor в отладочном состоянии может рассказать вам, почему .. Вы попытались сломать его? – tgpdyk

+0

Хорошая идея, я попробую это. – William

+0

@tagaPdyk Странно, используя шаг за шагом режим отладки, окно переходит на второй монитор, не возвращаясь к первому даже до конца выполнения. – William

ответ

0

Хорошо, я не знаю, почему это работает. Но это решение.

Q = new queue(); 
Q.Show(); 
Thread.Sleep(100); //need to delay first before moving the position 
showOnMonitor(1, Q); 

public static void showOnMonitor(int monitor, Window w2) 
     { 
      Screen[] sc; 
      sc = Screen.AllScreens; 

      if (monitor >= sc.Length) 
      { 
       monitor = 0; 
      } 


      w2.WindowStartupLocation = WindowStartupLocation.Manual; 

      var workingArea = sc[monitor].WorkingArea; 
      w2.Left = workingArea.Left; 
      w2.Top = workingArea.Top; 
      w2.Width = workingArea.Width; 
      w2.Height = workingArea.Height; 

     }