2008-10-22 3 views
13

Irgendwelche Ideen, wie das System Glocke zu stoppen klingen, wenn CTRL - A verwendet wird Text in einer WinForms-Anwendung zu wählen?Stoppen Sie die Glocke auf STRG + A (WinForms)

Hier ist das Problem. Erstellen Sie ein Winforms-Projekt. Platzieren Sie ein Textfeld auf dem Formular, und fügen Sie den folgenden Ereignishandler in dem Formular hinzu, um CTRL - A zu ermöglichen, den gesamten Text in dem Textfeld auszuwählen (egal welches Steuerelement den Fokus hat).

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; 
    } 
} 

Es funktioniert, aber trotz e.Handled = true, wird das System Glocke jedes Mal CTRL klingen - A gedrückt wird.


Danke für die Antwort.

KeyPreview auf dem Formular ist auf wahr gesetzt - aber das hört nicht auf das System klingeln - das ist das Problem, das ich versuche zu lösen - nervig.

Antwort

1

Das ist für mich gearbeitet:

die KeyPreview auf True auf dem Formular ein.

Hoffe, dass hilft.

6

Dank eines MSDN Forum Post - dieses Problem tritt nur auf, wenn Textfelder in mehrzeiligen Modus sind und Sie möchten, dass Ctrl alle + A für ausgewählte umzusetzen.

Hier ist die Lösung

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; 
     } 
    } 

Hoffnung diese

1

hilft @ H7Ø Lösung ist gut, aber ich verbesserte es ein bisschen für mehrfach TextBox Komponenten auf dem Formular.

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