2013-04-18 18 views
17

Per quanto ne so, questi sono gli unici tasti che reagiscono quando un pulsante è attivo.Perché i tasti Invio e Spazio si comportano diversamente per i pulsanti?

Premere Inserire all'istante "fa clic" sul pulsante, anche se si tiene premuto il tasto. (Quindi il "clic" avviene su KeyDown).

Premere Spazio si comporta più come un normale clic del mouse; tenerlo premuto non attiva l'evento Click, ma lo fa una volta rilasciato. (Quindi il "clic" avviene su KeyUp o KeyPressed.)

Perché la differenza? Mi piacerebbe un buon articolo sull'argomento o semplicemente una spiegazione logica del motivo per cui queste due chiavi hanno un comportamento diverso. Sicuramente c'è una spiegazione là fuori!

+0

Immettere è accettare, Esc è rifiutare, Barra spaziatrice è premere il tasto messo a fuoco. Quindi, se il pulsante predefinito è OK, quando si preme Invio si accettano effettivamente le modifiche e non si preme il pulsante. – Aristos

+0

Questo è falso nel caso di un 'MessageBox'. Inserisci e spazia entrambi facendo clic sul pulsante focalizzato, ma con il comportamento sopra descritto. – Felix

+0

Nella finestra di messaggio, il pulsante OK ha lo stato attivo, quindi è come dico. Quello che ha il focus è ottenere la barra spaziatrice come click, l'invio è accettare la finestra del messaggio, l'esc lo rifiuta e lo chiude. – Aristos

risposta

5

Non riesco a trovare articoli che spiegano questo ed è davvero una buona domanda. Personalmente ritengo che sia a fini di funzionalità

tasto Invio i classici AcceptButton agisce come un FullClick (clicca/ClickReleased) è per questo che, se lo si tiene si avrà l'effetto di cliccare più volte.

Spazio tuttavia è una (Senza liberatoria click finché non si rilascia il tasto) SingleClick quindi è possibile eseguire un'attività in cui solo una Click è richiesto senza ClickRelease e le azioni in cui solo è richiesta la selezione di un controllo per attivarlo. Come lo CheckBox o RadioButtons che non può essere attivato con lo Immettere ma può essere attivato con lo Spazio come se si fa clic su di esso.

In conclusione, il Spazio sarebbe il funzionario MouseClick dal momento che ha gli stessi effetti di un MouseClick uppon premendo o rilasciando. Inserire sarebbe una sorta di scorciatoia per un Un clic completo clic. Tutto, ovviamente, nell'idea di dare più possibilità alla tastiera stessa.

3

Stai vedendo due comportamenti diversi, che non sono associati ad eccezione del fatto che entrambi gestiscono eventi di tastiera su una winform.

Inserire è speciale perché è il tasto per attivare lo acceptButton di un modulo. In effetti, hai perso un'altra chiave che può influire sui pulsanti: Esc è cancelButton e genererà anche eventi.

Come spiegato PhaDaPhunk, spazio è un MouseClick per qualsiasi componente che accetta un click del mouse, ma non ho trovato una spiegazione dettagliata per esso. Presumo che sia il comportamento predefinito di tutti i controlli. La guida Microsoft per accessibility sembra implicare che è così nella loro sezione tastiera a base di navigazione

Per inciso, questo Microsoft support knowledge base entry sembra dimostrare che l'attuazione barra spaziatrice è passato da Button.Click a Button.MouseClick. Forse questa è la ragione per cui è diverso comportamento.

+0

È possibile che nel caso di un MessageBox con solo un pulsante 'OK', esc attivi la X in alto a destra? (Non so come formattare i tasti della tastiera) – Felix

+0

Ricomponendo le chiavi, ho scoperto come farlo modificando il tuo post e poi cancellando. Apparentemente, è la chiave . Per quanto riguarda la tua domanda, sembra giusto, ma dovrei esaminarlo ulteriormente. Il modulo ha un campo impostabile per cancelButton. –

+0

Qualcuno l'ha modificato per me:/ – Felix

Problemi correlati