Frage

Ich muss eine Nachricht variabler Länge anzeigen und zulassen, dass der Text auswählbar ist.Ich habe die TextBox schreibgeschützt gemacht, sodass der Text nicht bearbeitet werden kann, der Eingabecursor jedoch weiterhin angezeigt wird.

Das blinkende Eingabecursor ist verwirrend.Wie verstecke ich es?

War es hilfreich?

Lösung

Sie können dies über einen Win32-Aufruf tun

[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
    HideCaret(someTextBox.Handle);
}

Andere Tipps

Vergessen Sie bei Verwendung des Win32-Aufrufs nicht, den Cursor im GotFocus-Ereignis des Textfelds auszublenden.

Der Vollständigkeit halber benötigte ich eine solche Funktionalität für die Verwendung mit einem DevExpress WinForms TextEdit Kontrolle.

Sie bieten bereits eine ShowCaret und ein HideCaret Methode, leider sind sie geschützt.Deshalb habe ich eine abgeleitete Klasse erstellt, die die Funktionalität bereitstellt.Hier ist der vollständige Code:

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();
        }
    }
}

Um den Code zu verwenden, verwenden Sie einfach die abgeleitete Klasse anstelle des Originals TextEdit Klasse in Ihrem Code und Anruf DoHideCaret() überall, z.B.im Konstruktor Ihres Formulars, das das Textbearbeitungssteuerelement enthält.

Vielleicht ist das in Zukunft für jemanden hilfreich.

Wenn Sie das Textfeld deaktivieren (set Enable=false), ist der darin enthaltene Text weiterhin scrollbar und auswählbar.Wenn Ihnen die visuelle Darstellung eines deaktivierten Textfelds (normalerweise grauer Hintergrund) nicht gefällt, können Sie die Farben manuell überschreiben.

Seien Sie gewarnt: Wenn Sie Farben manuell überschreiben, sieht Ihr Formular/Steuerelement auf Systemen, die nicht die Standardeinstellungen für Farbe/Design verwenden, seltsam aus.Gehen Sie nicht davon aus, dass die Kontrolle aller anderen weiß sein wird, weil Ihre Kontrolle weiß ist.Deshalb sollten Sie nach Möglichkeit immer die Systemfarben verwenden (definiert in der System.Drawing.SystemColors Aufzählung) wie z SystemColors.ControlLight.

AFAIK, das kann nicht getan werden.Das TextBox-Steuerelement ist ein lustiges Steuerelement, weil es tatsächlich über ein Steuerelement verfügt viel Verhaltensweisen, die aufgrund der Art und Weise, wie sie auf das Betriebssystem zugreifen, nicht geändert werden können.Aus diesem Grund werden viele der coolen benutzerdefinierten TextBoxen von Grund auf neu geschrieben.

Ich fürchte, Sie können möglicherweise nicht das tun, was Sie tun möchten :(

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top