2010-02-06 6 views
26

Scusate per il titolo lungo, ma non riuscivo a pensare a un altro modo per dirlo.C#: Come fare premere entra in una casella di testo innescare un pulsante, ma consentire comunque scorciatoie come "Ctrl + A" per passare?

ho questo:

private void textBoxToSubmit_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      buttonSubmit_Click((object)sender, (EventArgs)e); 
     } 
    } 

... in modo da rendere urgente immettere nella casella di testo innescare il pulsante "Invia". Tuttavia, questo impedisce anche scorciatoie da passare. (Non sei sicuro di cosa abbia a che fare, forse solo combinazioni a più tasti?)

ShortcutsEnabled è impostato su true.

Grazie in anticipo!

+0

Nessuna riproduzione, non me l'aspettavo. Avrai bisogno di e.SuppressKey = true per interrompere il segnale acustico. –

+0

Per quanto riguarda il titolo: potresti aver inserito la parte ancora nella prima frase del tuo corpo di domanda. La prima frase ora è off-topic comunque. – Bitterblue

risposta

37

Non è possibile utilizzare AcceptButton per la finestra Proprietà moduli? Imposta il comportamento predefinito per Immettere la pressione del tasto, ma è comunque possibile utilizzare altre scorciatoie.

+0

Capisco! Grazie per aver chiarito questo. Sono ovviamente nuovo di C#, cose così semplici come questa mi confondono. Grazie! –

+0

Nessun problema - felice di aiutare :) –

+0

e se si desidera che più controlli per ogni accetta, tuttavia, e non necessariamente con un pulsante per ciascuno? – Nyerguds

14

Se si desidera che il ritorno attivi un'azione solo quando l'utente si trova nella casella di testo, è possibile assegnare il pulsante desiderato al controllo AcceptButton, in questo modo.

private void textBox_Enter(object sender, EventArgs e) 
    { 
     ActiveForm.AcceptButton = Button1; // Button1 will be 'clicked' when user presses return 
    } 

    private void textBox_Leave(object sender, EventArgs e) 
    { 
     ActiveForm.AcceptButton = null; // remove "return" button behavior 
    } 
+0

In caso di UserControl, è possibile utilizzare 'ParentForm.AcceptButton' –

10

È possibile utilizzare KeyPress invece di KeyUp o KeyDown suo più efficiente e come gestire

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar == (char)Keys.Enter) 
     { 
      e.Handled = true; 
      button1.PerformClick(); 
     } 
    } 

spero che funziona

+0

Può essere espanso per i listener di eventi di altri controlli rispetto ai pulsanti? Non riesco a trovare alcun ListBox.PerformDoubleClick() per attivare la sua azione doppio clic. – Nyerguds

+0

Ah, non importa. Più facile chiamare semplicemente la funzione listener sottostante. A proposito ... questo codice non sembra funzionare se il modulo ha un set AcceptButton. – Nyerguds

1

Non è necessario alcun codice lato client se facendo questo qui è ASP.NET. L'esempio seguente è una casella di input di boostrap con un pulsante di ricerca con un'icona fontawesome.

Vedrete che al posto di usare un tag regolare < div con una classe di "gruppo di input" ho usato un asp: Panel. La proprietà DefaultButton impostata sull'ID del mio pulsante, fa il trucco.

Nell'esempio seguente, dopo aver digitato qualcosa nella casella di testo di immissione, è sufficiente premere invio e ciò comporterà una presentazione.

<asp:Panel DefaultButton="btnblogsearch" runat="server" CssClass="input-group blogsearch"> 
<asp:TextBox ID="txtSearchWords" CssClass="form-control" runat="server" Width="100%" Placeholder="Search for..."></asp:TextBox> 
<span class="input-group-btn"> 
    <asp:LinkButton ID="btnblogsearch" runat="server" CssClass="btn btn-default"><i class="fa fa-search"></i></asp:LinkButton> 
</span></asp:Panel> 
Problemi correlati