2013-04-09 11 views
7

Ho un'applicazione Windows Form che ha un TextBox standard su di esso. Non ci sono eventi gestiti e nessun menu nel modulo. Quando premo il tasto Ctrl + A collegamento per selezionare tutto il testo, ottengo un ding e non è selezionato nulla.Seleziona Tutto il collegamento non riesce quando la proprietà MultiLine è True

Per confermare che non ho inavvertitamente codice qualcosa ho creato una nuova applicazione di moduli Windows con solo una casella di testo sul modulo. Ho provato con C# e VB.Net ed è lo stesso in entrambi. Ho provato questo in Visual Studio 2012 Update 1 in esecuzione su Windows 7 e Visual Studio 2008 in esecuzione su Windows XP e si comporta lo stesso in ogni istanza.

Riesco a rilevare la combinazione di tasti nell'evento KeyDown in modo abbastanza semplice, ma anche dopo aver impostato e.Cancel = true la macchina suona il "ding".

C'è un modo per sopprimere il suono, o anche meglio, un modo per far sì che la casella di testo accetti il ​​collegamento allo stesso modo di una casella di testo non multilinea?

risposta

18

Questa è una sorpresa per molti programmatori, ma il controllo di modifica nativo di Windows non implementa effettivamente Ctrl + A come scorciatoia quando è in modalità multi-linea. Deve essere implementato dal programma che lo usa. Puoi vederlo ad esempio in Blocco note, un programma che usa un controllo di modifica su più righe. Usa File + Apri + File, seleziona c: \ windows \ notepad.exe, apri il nodo Acceleratore e fai doppio clic su una delle tabelle.

implementazione non è difficile:

private void textBox1_KeyDown(object sender, KeyEventArgs e) { 
     if (e.KeyData == (Keys.Control | Keys.A)) { 
      textBox1.SelectAll(); 
      e.Handled = e.SuppressKeyPress = true; 
     } 
    } 

UPDATE: alterata NET 4.6.1, System.Windows.Forms.TextBox ora implementa Ctrl + A per il multi-linea TextBoxes pure.

+0

Hmm, è stata una sorpresa per me, sicuramente. +1 – Neolisk

+1

@Hans Passant Grazie, sapevo di SelectAll, ma avevo ancora quel fastidioso suono "ding". L'aggiunta di 'e.SuppressKeyPress = true' a' e.Handled = true' lo ha fermato. – jac

+0

lavorato. Grazie :) +1 –

Problemi correlati