je me demande pourquoi ce code ne parvient pas à concentrer la zone de texte ...?
private void sendEmail_btn_Click(object sender, EventArgs e)
{
String sendTo = recipientEmail_tbx.Text.Trim();
if (!IsValidEmailAddress(sendTo))
{
MessageBox.Show("Please Enter valid Email address","Cognex" MessageBoxButtons.OK, MessageBoxIcon.Error);
recipientEmail_tbx.Focus();
}
}
Utilisez à la place Select()
:
recipientEmail_tbx.Select();
Le focus est une méthode de bas niveau destinée principalement aux auteurs de contrôles personnalisés. À la place, les programmeurs d'applications doivent utiliser la méthode Select ou la propriété ActiveControl pour les contrôles enfants, ou la méthode Activate pour les formulaires.
http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
Ajoutez Delay some miliSec
. Retardez ensuite appelez Focus()
et n'oubliez pas de mettre à l'intérieur Dispatcher
.
Task.Delay(100).ContinueWith(_ =>
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
TextBoxNAme.Focus();
}));
});
Même moi, j'ai essayé avec beaucoup de solutions ci-dessus, mais aucune d'entre elles n'a fonctionné pour moi car j'essaie de me concentrer sur le chargement des pages. Enfin, j'ai obtenu cette solution et cela a fonctionné.
private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
txtBox.Focus();
}
Utilisez le gestionnaire d'événements Form_Activated, en conjonction avec un booléen firstActivation
.
private bool firstActivation = true;
private Control firstWindowsControl = null;
...
private void DynamicForm_Activated(object sender, EventArgs e)
{
if (firstActivation)
{
firstActivation = false;
bool fwcPresent = (firstWindowsControl != null);
Console.WriteLine($"DynamicForm_Activated: firstWindowControl present: {fwcPresent}");
if (fwcPresent)
{
firstWindowsControl.Focus();
}
}