2012-07-02 90 views
0

我建立一個WinForms應用程序看起來大致是這樣的處理:鍵盤在一個WinForms應用程序

enter image description here

有一個單一的形式,具有菜單,工具欄,狀態欄,導航樹,一個自定義繪圖畫布(它是一個UserControl,它接受鍵盤輸入並繪製文本並呈現插入符號)以及一個允許用戶搜索文本的查找面板。

我在與獲得這些行爲的工作難度:查找小組

1)加速器(如「C」的匹配情況和「W」全字)防止這些字符被輸入進入畫布,即使畫布有焦點。

2)當焦點位於任何位置時按ESC鍵,但畫布應將焦點返回到畫布。特別是,這應該在「查找」文本框具有焦點時起作用。這可以通過將鍵盤掛在單一點而不是每個可能的聚焦控制來完成嗎?

回答

2

如果您有多個控件競爭鍵盤輸入,請將表格KeyPreview Property設置爲True,以便在窗體的KeyPress事件處理程序中處理您的KeyPress事件。然後您可以相應地指導鍵盤輸入。

從以上MSDN鏈接:

獲取或設置指示事件被傳遞給具有焦點的控制之前的形式是否會接收按鍵事件的值。


看看這樣的事情對你的作品,它仍然會允許你這樣做同時Alt鍵 +加速鍵,但將焦點設置回用戶控件,如果它有重點和Alt鍵被按下:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (ActiveControl.Name == userControl11.Name) 
     { 
      if (e.Alt) 
      { 
       e.Handled = true; 
       userControl11.Focus(); 
      } 
     } 
    } 
+0

謝謝 - 這可能適用於問題#2。關於第一個問題的任何想法? – bright

+0

@bright我對兩者都使用了相同的過程。只需查找相應的修改鍵即可。 –

+0

我看到 - 不幸的是這意味着明確檢查每個修飾符。如果沒有一般的方法,會這樣做,但我仍然堅持一個。 – bright

相關問題