2008-10-22 42 views
13

任何想法如何從何時CTRL發聲停止系統鈴聲 - 一個用來選擇在WinForms應用程序的文本?停止貝爾CTRL-A(的WinForms)

這是問題所在。創建一個Winforms項目。在窗體上放置一個文本框,並在窗體上添加以下事件處理函數,以允許選擇文本框中的所有文本(不管哪個控件具有焦點),以允許CTRL - A

void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control) 
    { 
     System.Diagnostics.Debug.WriteLine("Control and A were pressed."); 
     txtContent.SelectionStart = 0; 
     txtContent.SelectionLength = txtContent.Text.Length; 
     txtContent.Focus(); 
     e.Handled = true; 
    } 
} 

它的工作原理,但儘管e.Handled = true,則系統鍾會一次比一次穩健CTRL - 一個被按下。


感謝您的回覆。

表格上的KeyPreview設置爲true - 但這並不能阻止系統響鈴 - 這是我試圖解決的問題 - 煩人。

回答

1

這爲我工作:

設置將KeyPreview的形式爲True。

希望有所幫助。當文本框是多模式,你想實現按Ctrl +一個選擇都只出現這個問題 -

6

由於採用了MSDN論壇發帖。

這裏的解決方案

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == (Keys.A | Keys.Control)) { 
    txtContent.SelectionStart = 0; 
    txtContent.SelectionLength = txtContent.Text.Length; 
    txtContent.Focus(); 
    return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
21
private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.A) 
     { 
      this.textBox1.SelectAll(); 
      e.SuppressKeyPress = true; 
     } 
    } 

希望這有助於

1

@ H7O的解決方案是好的,但我提高了一點的形式乘TextBox組件。

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.A) 
    { 
    ((TextBox)sender).SelectAll(); 
    e.SuppressKeyPress = true; 
    } 
}