Как мне скрыть курсор ввода в Системе?Windows.Формы.Текстовое поле?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Вы можете сделать это с помощью вызова win32

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

Другие советы

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

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

Они уже обеспечивают 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() в любом месте, напримерв конструкторе вашей формы, который содержит элемент управления редактированием текста.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top