Как скрыть каретку ввода в System.Windows.Forms.TextBox? - PullRequest
7 голосов
/ 04 сентября 2008

Мне нужно отобразить сообщение переменной длины и разрешить выбор текста. Я сделал TextBox ReadOnly, который не позволяет редактировать текст, но курсор ввода по-прежнему отображается.

Мигающая каретка ввода сбивает с толку. Как мне это скрыть?

Ответы [ 5 ]

13 голосов
/ 04 сентября 2008

Вы можете сделать через вызов win32

[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
    HideCaret(someTextBox.Handle);
}
5 голосов
/ 02 марта 2010

При использовании вызова win32 не забудьте скрыть курсор в событии GotFocus текстового поля.

3 голосов
/ 13 мая 2013

Просто для полноты мне понадобился такой функционал для использования с DevExpress WinForms TextEdit control .

Они уже предоставляют методы ShowCaret и HideCaret, к сожалению, они защищены. Поэтому я создал производный класс, который обеспечивает функциональность. Вот полный код:

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

Чтобы использовать код, просто используйте производный класс вместо исходного класса TextEdit в своем коде и вызывайте DoHideCaret() где угодно, например, в конструкторе вашей формы, который содержит элемент управления для редактирования текста.

Может быть, это пригодится кому-то в будущем.

1 голос
/ 04 сентября 2008

Если вы отключите текстовое поле (установите Enable=false), текст в нем все еще можно прокручивать и выбирать. Если вам не нравится визуальное представление отключенного текстового поля (обычно на сером фоне), вы можете вручную переопределить цвета.

Имейте в виду, ручная переопределение цветов сделает вашу форму / элемент управления странным в системах, которые не используют настройки цвета / темы по умолчанию. Не думайте, что из-за того, что ваш контроль белый, контроль каждого будет белым. Вот почему вы всегда должны использовать системные цвета, когда это возможно (определено в перечислении System.Drawing.SystemColors), например SystemColors.ControlLight.

0 голосов
/ 04 сентября 2008

AFAIK, это нельзя сделать. Элемент управления TextBox представляет собой забавный элемент управления, потому что на самом деле он имеет поведение lot , которое нельзя изменить из-за способа, которым он подключается к операционной системе. Вот почему многие классные текстовые поля написаны с нуля.

Боюсь, вы не сможете делать то, что хотите: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...