Comment masquer le curseur d'entrée dans un System.Windows.Forms.TextBox ?
Question
Je dois afficher un message de longueur variable et permettre au texte d'être sélectionnable.J'ai créé le TextBox ReadOnly qui ne permet pas de modifier le texte, mais le curseur d'entrée est toujours affiché.
Le curseur d'entrée clignotant prête à confusion.Comment puis-je le cacher ?
La solution
Vous pouvez le faire via un appel win32
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
HideCaret(someTextBox.Handle);
}
Autres conseils
Lorsque vous utilisez l'appel win32, n'oubliez pas de masquer le curseur dans l'événement GotFocus de la zone de texte.
Juste pour être complet, j'avais besoin d'une telle fonctionnalité pour l'utiliser avec un DevExpress WinForms TextEdit
contrôle.
Ils fournissent déjà un ShowCaret
et un HideCaret
méthode, malheureusement ils sont protégés.J'ai donc créé une classe dérivée qui fournit la fonctionnalité.Voici le code complet :
public class MyTextEdit : TextEdit
{
private bool _wantHideCaret;
public void DoHideCaret()
{
HideCaret();
_wantHideCaret = true;
}
public void DoShowCaret()
{
ShowCaret();
_wantHideCaret = false;
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
if (_wantHideCaret)
{
HideCaret();
}
}
}
Pour utiliser le code, utilisez simplement la classe dérivée au lieu de l'originale TextEdit
classe dans votre code et appelez DoHideCaret()
n'importe où, par ex.dans le constructeur de votre formulaire qui contient le contrôle d'édition de texte.
Peut-être que cela sera utile à quelqu'un dans le futur.
Si vous désactivez la zone de texte (définissez Enable=false
), le texte qu'il contient est toujours défilable et sélectionnable.Si vous n'aimez pas la présentation visuelle d'une zone de texte désactivée (fond gris généralement), vous pouvez remplacer manuellement les couleurs.
Soyez averti, le remplacement manuel des couleurs va rendre votre formulaire/contrôle étrange sur les systèmes qui n'utilisent pas les paramètres de couleur/thème par défaut.Ne présumez pas que parce que votre contrôle est blanc, le contrôle de tout le monde sera blanc.C'est pourquoi vous devez toujours utiliser autant que possible les couleurs du système (définies dans le System.Drawing.SystemColors
énumération) comme SystemColors.ControlLight
.
AFAIK, ceci ne peut pas être terminé.Le contrôle TextBox est un contrôle amusant car il a en fait un parcelle de comportement qui ne peut pas être modifié en raison de la façon dont il exploite le système d'exploitation.C'est pourquoi de nombreuses TextBox personnalisées sont écrites à partir de zéro.
J'ai peur que vous ne puissiez pas faire ce que vous souhaitez faire :(