2013-09-22 31 views
1

我用一個文本框我的Windows窗體應用程序中,我需要禁用快捷鍵CTRL + CTRL + H^。我嘗試了許多不同的解決方案,我通過谷歌發現,但它不會工作。C#文本框禁用快捷鍵

我用CTRL +已經在我的應用程序自定義的快捷鍵,我不希望有我的文本框裏面這個命令插入一個製表位。無論出於何種原因CTRL + H就像按刪除一樣?

如果我設置的 「快捷鍵啓用」 爲false控制CTRL + CTRL + H^仍在工作的性質。 CTRL + CCTRL + V被禁用。如果我將「啓用快捷鍵」設置爲false,我希望所有快捷鍵都關閉。

我嘗試下面的代碼,我發現的地方,但它也並不妨礙CTRL + CTRL + ^h

private void textBoxComment_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Modifiers == Keys.Control) 
     { 
      switch(e.KeyCode) 
      { 
       case Keys.C: 
       case Keys.X: 
       case Keys.V: 
       case Keys.Z: 
       case Keys.I: 
       case Keys.H: 
       e.Handled = true; 
       break; 
       default: 
       break; 
      } 
     } 
    } 

回答

1

嘗試重寫ProcessCmdKey功能:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if ((keyData & Keys.Control) > 0 && (keyData & Keys.KeyCode) == Keys.V) 
    { 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

我已經有CTRL + I的覆蓋觸發功能抓取從axAXVLCplugin當前位置。但是當我按CTRL +我,我在我的文本框和當前位置上得到一個選項卡。所以兩者都被執行。 – Jones

0

使用shortcutsenabled屬性,以便您可以在排除鼠標和鍵盤的快捷鍵方面更有選擇性。

TextBox.ShortcutsEnabled = false; 

參考msdn 使用ShortcutsEnabled屬性來啓用或禁用以下快捷組合鍵和控制的快捷菜單: CTRL + Z CTRL + E CTRL + C CTRL + Y CTRL + X CTRL + BACKSPACE CTRL + V CTRL + DELETE CTRL + A SHIFT + DELETE CTRL + L SHIFT + INSERT CTRL + R

+0

CTRL + H和CTRL + I仍在工作 private void MainWindow_Load(object sender,EventArgs { textBoxComment。ShortcutsEnabled = false; } – Jones

0

嘗試增加e.SuppressKeyPress = true也:

private void textBoxComment_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Modifiers == Keys.Control) 
    { 
     switch(e.KeyCode) 
     { 
      case Keys.C: 
      case Keys.X: 
      case Keys.V: 
      case Keys.Z: 
      case Keys.I: 
      case Keys.H: 
      e.Handled = true; 
      e.SuppressKeyPress = true; 
      break; 
      default: 
      break; 
     } 
    } 
} 
+0

這也行不通:( – Jones

+0

@Jones我測試了它,你說'Ctrl + H'似乎像一個'Backspace'一樣工作,而且當我測試時它確實是這樣工作的(有點咒語),但是當我使用我發佈的代碼時,**它真的被禁用**。我想你可能想發佈更多的代碼 –

+0

我剛試過一個空白的表單,所以我添加了一個文本框,並在函數public Form1(){InitializeComponent( )}我已經粘貼了您的代碼,然後CTRL + I被禁用,但CTRL + H仍然在工作中,我不能添加更多的代碼,因爲我是StackOverflow的新手,我只有權利在此刻發表評論。解釋爲什麼CTRL + I仍然可以在我的其他應用程序中使用。也許是因爲我使用CTRL + I的覆蓋來觸發另一個功能,並且因爲CTRL + I仍然可以在Textbox中使用? – Jones