J'ai plusieurs boîtes de texte. Je voudrais rendre le bouton Entrée agir comme onglet. Donc, lorsque je serai dans une zone de texte, appuyez sur Entrée me déplacera à la suivante. Pourriez-vous s'il vous plaît dites-moi comment implémenter cette approche sans ajouter de code à l'intérieur de la classe Textbox (pas de remplacement et ainsi de suite si possible)?
Voici le code que j'utilise habituellement. Ce doit être sur l'événement clé.
if (e.KeyData == Keys.Enter)
{
e.SuppressKeyPress = true;
SelectNextControl(ActiveControl, true, true, true, true);
}
MISE À JOUR
Autre moyen est l'envoi de la touche "Tab"! Et le remplacement de la méthode le rend aussi facile :)
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Enter))
{
SendKeys.Send("{TAB}");
}
return base.ProcessCmdKey(ref msg, keyData);
}
Vous pouvez écrire sur la clé de tout contrôle:
if (e.KeyCode == Keys.Enter)
{
if (this.GetNextControl(ActiveControl, true) != null)
{
e.Handled = true;
this.GetNextControl(ActiveControl, true).Focus();
}
}
GetNextControl ne fonctionne pas sur Vista .
Pour que cela fonctionne avec Vista, vous devrez utiliser le code ci-dessous pour remplacer la ceci.getNextControl ...:
System.Windows.Forms.SendKeys.Send("{TAB}");
Vous n'avez pas besoin de faire un "Saisir le gestionnaire d'événements"
Tout ce que vous avez à faire est de faire un événement clé "central":
exemple
private void General_KeyDown(object sender, KeyPressEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (this.GetNextControl(ActiveControl, true) != null)
{
e.Handled = true;
this.GetNextControl(ActiveControl, true).Focus();
}
}
}
Ensuite, tout ce que vous avez à faire est d'aller à la concepteur Sélectionner toutes les textes de texte que vous souhaitez parcourir avec Entrée (sélectionnez-les en maintenant Ctrl enfoncé et en cliquant sur la zone de texte avec la souris) puis passez à des événements (Thunder comme bouton), événement de recherche et type à l'intérieur général_keydown. Maintenant, toutes vos boîtes de texte sélectionnées auront le même événement de Keydown :) Cela rend tout ce que Muuuuuch beaucoup plus facilement, causer une forme avec 100 textes de texte et vous souhaitez parcourir tout avec ENTER .... Faire un événement séparé pour chaque Texbox est .. . Et bien, pas une bonne façon de faire un programme, ce n'est pas soigné. J'espère que ça aidé !!
Blockquote
Il est important de noter que si vous obtiendrez un son "Ding" gênant ou un son d'avertissement gênant chaque fois que le contrôle s'attend à une commande de bouton associée et e.Handled = true
N'est-ce pas toujours la réponse à vous débarrasser du bruit/son/ding.
Si la commande (c'est-à-dire une zone de texte à une ligne unique), vous attendez à un bouton associé pour "Entrer" votre entrée, vous devez également traiter le contrôle "manquant".
e.Handled = e.SuppressKeyPress = true;
Cela peut être utile lorsque vous vous débarrassez du son "Ding".
Pour ce que ça vaut la peine - dans ma situation, mes utilisateurs devaient utiliser la "touche Entrée", car nous passions à partir d'une application à écran terminal/vert vers une application Windows et ils ont été plus utilisés pour "entrer-ing" à travers des champs plutôt que de tabuler. .
Toutes ces méthodes fonctionnaient mais gardaient toujours le son ennuyeux jusqu'à ce que j'ai ajouté e.SuppressKeyPress
.
Si vous définissez l'ordre de l'onglet de toutes les commandes et apportez forme.KeyPreview = TRUE, seulement besoin de cela:
Private Sub frmStart_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Enter Then
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
Cela a fonctionné pour moi
if (e.Key == Key.Enter)
((TextBox)sender).MoveFocus(new TraversalRequest(new FocusNavigationDirection()));
C'est la solution que j'utilise pour vb.net
SET KeyPreview = true dans vos propriétés de formulaire.
Mettez ce code dans le formulaire Cleaudown Event:
Si (e.keydata = keys.enter) alors
'Pour tout contrôle multilignot, vous devez quitter pour laisser la touche MULLINE' TEXTBOXTBOX INTRO 'MAINTUIRE SCHIPS.
If ActiveControl.Name = txtMyMutilineTextBox.Name Then Exit Sub
e.SuppressKeyPress = True
SelectNextControl(ActiveControl, True, True, True, True)
Fin si
profiter !!!!
Xabier Aberasturi Larruzea
J'utilise ce code dans l'un des événements de clé de la zone de texte
if (e.KeyData == Keys.Enter)
{
e.SuppressKeyPress = true;
SelectNextControl(ActiveControl, true, true, true, true);
}
Impossible de gérer cet événement keydown
pour toutes les zones de texte de mon formulaire. Proposer quelque chose. Merci