Comment masquer le curseur d'entrée dans un System.Windows.Forms.TextBox ?

StackOverflow https://stackoverflow.com/questions/44131

  •  09-06-2019
  •  | 
  •  

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 ?

Était-ce utile?

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 :(

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top