Как мне скрыть курсор ввода в Системе?Windows.Формы.Текстовое поле?
Вопрос
Мне нужно отобразить сообщение переменной длины и разрешить выбор текста.Я сделал текстовое поле доступным только для чтения, которое не позволяет редактировать текст, но курсор ввода по-прежнему отображается.
Мигающий курсор ввода сбивает с толку.Как мне это скрыть?
Решение
Вы можете сделать это с помощью вызова 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 - забавный элемент управления, потому что он на самом деле имеет лот поведения, которое не может быть изменено из-за способа, которым оно подключается к операционной системе.Вот почему многие классные пользовательские текстовые поля написаны с нуля.
Я боюсь, что вы, возможно, не сможете сделать то, что вы хотите сделать : (