Je dois supprimer le focus de plusieurs TextBox. J'ai essayé d'utiliser:
textBox1.Focused = false;
Sa valeur de propriété ReadOnly
est true
.
J'ai ensuite essayé de définir le focus sur le formulaire, de manière à le supprimer de toutes les zones de texte, mais cela ne fonctionne pas non plus:
this.Focus();
et la fonction retourne false
quand une zone de texte est sélectionnée.
Alors, comment puis-je supprimer le focus d'une zone de texte?
Vous avez besoin d'un autre contrôle de mise au point pour déplacer le focus.
Notez que vous pouvez définir le focus sur une étiquette. Vous voudrez peut-être envisager où vous voulez que la touche [Tab] se porte ensuite.
Notez également que vous ne pouvez pas le définir sur le formulaire. Les contrôles de conteneur tels que Form et Panel transmettent le focus à leur premier contrôle enfant. Quelle pourrait être la TextBox dont vous vouliez qu'elle s'éloigne.
Se concentrer sur le label n'a pas fonctionné pour moi, faire quelque chose comme label1.Focus()
non? la zone de texte a toujours le focus lors du chargement du formulaire, bien que j'aie essayé Velociraptors répondre a fonctionné pour moi, en définissant le contrôle Active du formulaire sur l'étiquette de la manière suivante:
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = label1;
}
Vous pouvez ajouter le code suivant:
this.ActiveControl = null; //this = form
Essayez de désactiver et d'activer la zone de texte.
Vous pouvez également définir la propriété de formulaires activecontrol
sur null
comme
ActiveControl = null;
Focus
définit le focus d'entrée, aussi sa configuration sur le formulaire ne fonctionnera pas car les formulaires n'acceptent pas les entrées. Essayez de définir la propriété ActiveControl
du formulaire sur un autre contrôle. Vous pouvez également utiliser Select
pour sélectionner un contrôle spécifique ou SelectNextControl
pour sélectionner le contrôle suivant dans l'ordre de tabulation.
Essaye celui-là:
Premier ordre de tabulation.
Ensuite, dans l'événement de chargement de formulaire, nous pouvons envoyer une application par touche de programmation à l'application. Donc, cette application donnera le focus au 1er contrôle dans l’ordre des tabulations.
en charge de forme même écrire cette ligne.
SendKeys.Send("{TAB}");
Cela a fonctionné pour moi.
Ce post m'a amené à faire ceci:
ActiveControl = null;
Cela me permet de capturer toutes les entrées au clavier au plus haut niveau sans que d'autres contrôles ne deviennent fous.
J'ai trouvé une bonne alternative! Cela fonctionne mieux pour moi, sans mettre l'accent sur autre chose.
Essayez ça:
private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
Il semble que je n'ai pas à mettre l'accent sur d'autres éléments. Sur une application Windows Phone 7, j'utilise la méthode Focus pour supprimer le focus d'une zone de texte.
Donner la commande suivante ne mettra le focus sur rien:
void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Focus();
}
}
http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
Cela a fonctionné pour moi, mais je ne sais pas pourquoi cela n'a pas fonctionné pour vous: /
Une solution simple serait de tuer le focus, créez simplement votre propre classe:
public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
// constants for the message sending
const int WM_SETFOCUS = 0x0007;
const int WM_KILLFOCUS = 0x0008;
protected override void WndProc(ref Message m) {
if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;
base.WndProc (ref m);
}
}
Je l'ai fait sur mon contrôle personnalisé, j'ai fait ceci surFocus ()
this.Parent.Focus();
Donc, si texbox est focalisé - il focalise instantanément le parent de zone de texte (formulaire, ou panneau ...). C'est une bonne option si vous voulez faire cela sur un contrôle personnalisé.
//using System;
//using System.Collections.Generic;
//using System.Linq;
private void Form1_Load(object sender, EventArgs e)
{
FocusOnOtherControl(Controls.Cast<Control>(), button1);
}
private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
{
foreach (var control in controls)
{
if (control.GetType().Equals(typeof(TextBox)))
{
control.TabStop = false;
control.LostFocus += new EventHandler((object sender, EventArgs e) =>
{
focusOnMe.Focus();
});
}
}
}
Si tout ce que vous voulez, c’est l’effet optique que la zone de texte n’a pas de sélection bleue sur tout son contenu, il suffit de sélectionner aucun texte:
textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();
Après cela, lors de l'ajout de contenu avec .Text += "..."
, aucune sélection bleue ne sera affichée.
La façon dont je le contourne consiste à placer tous mes contrôles Winform. Je crée toutes les étiquettes et les contrôles de forme non sélectionnés en ordre de tabulation 0, puis mon premier contrôle en ordre de tabulation 2, puis j'incrémente l'ordre de chaque contrôle sélectionnable de 1, donc 3, 4, 5, etc.
De cette façon, lorsque mes Winforms démarrent, la première zone de texte n'a pas le focus!
Veuillez essayer de définir TabStop
sur False
pour votre contrôle de vue non ciblé.
Pour par exemple:
txtEmpID.TabStop = false;
vous pouvez le faire par deux méthodes
faites glisser deux zone de texte
valeur tabindex à 0 de textbox2