2013-05-13 71 views
2

我試圖讓按下「enter」時最大化或最小化WPF表單。但是,在調試時,它不起作用。
我可以這樣寫,以便它可以最小化但不能最大化,但是一旦一個動作被執行就無法做到這一點。
如果有人能把我推向正確的方向,那將非常感激。
我目前使用「Enter」作爲兩個密鑰的組合的佔位符,我還沒有決定。我知道,對某些人來說可能會感到煩惱,但目前它對我很有用。
此外,我試圖製作一個可以在後臺運行的普通覆蓋程序,並且可以在按下組合鍵時彈出。使用兩個KeyDown方法無法工作,最大化/最小化表單

private void MainWindow_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (this.WindowState == WindowState.Minimized) 
    { 
     if (e.Key == Key.Enter) 
     { 
      this.WindowState = WindowState.Maximized; 
     } 
    } 
} 
private void MainWindow_KeyDown2(object sender, KeyEventArgs e) 
{ 
    if (this.WindowState == WindowState.Maximized) 
    { 
     if (e.Key == Key.Enter) 
     { 
      this.WindowState = WindowState.Minimized; 
     } 
    } 
} 
+0

你確定在'KeyDown2'狀態,你要儘量減少它之前最大化? 'KeyDow'也是一樣。嘗試添加'|| this.WindowState == WindowsState.Normal'到ifs – 2013-05-13 03:45:06

+0

剛剛嘗試過,沒有工作不幸。我在表單屬性中指定表單打開爲最大化,也許如果我嘗試更改它? – kmartmvp 2013-05-13 03:50:23

+0

不知道我怎麼沒有想到,我會看看那部分。但目前,如果程序以最大化開始,當按下「Enter」時它不會最小化 – kmartmvp 2013-05-13 03:53:07

回答

3

嘗試像這樣

private void MainWindow_KeyDown(object sender, KeyEventArgs e) 
{   
    if (e.Key == Key.Enter) 
    { 
     if (this.WindowState == WindowState.Minimized) 
     { 
      this.WindowState = WindowState.Maximized; 
     } 
     else 
     { 
      this.WindowState = WindowState.Minimized; 
     } 
    } 
} 
+0

即使在這裏工作有一個不同的問題,我認爲有一個單一的處理程序,切換'WindowState'比兩個呼叫順序你不能保證的處理者更好。 – Adrian 2013-05-13 03:58:36

+0

一旦最小化,程序仍然不會最大化。也許這只是我,它可能適用於OP。 – pcnThird 2013-05-13 04:04:18

+0

@Adrian我同意,我採取了一個非常複雜的方法。謝謝伊凡,這對於最大化是完美的,現在我只需要用熱鍵來做一些事情,讓它在最小化的時候讀取KeyDown。至少我是這麼認爲的....我猜我會看到 – kmartmvp 2013-05-13 04:04:47

1

一旦最小化,應用程序不會提高或響應事件,如的KeyDown。

然而,這個時候它的正常工作在正常或最大化的視圖狀態:

private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      if (this.WindowState == WindowState.Normal) 
      { 
       this.WindowState = WindowState.Maximized; 
      } 
      else 
      { 
       this.WindowState = WindowState.Normal; 
      } 
     } 
    } 
相關問題