C#, скрыть (убрать) курсор (каретку) из TextBox

Чтоб два раза не вставать, начну сразу с нескольких простейших манипуляций с курсором из TextBox.

Снятие выделения и управление местоположением курсора (каретки)

Иногда текст в многострочном TextBox‘е автоматически выделяется.

И это выделение обычно не нужно. Благо снять его легко, достаточно переместить курсор.

Установка курсора в начало или конец текста

Для установки курсора в начало текста устанавливаем свойство SelectionStart в 0. Т.е. устанавливаем курсор перед первым символом текста:

//ставим курсор в начало текста
txtSampleText.SelectionStart = 0;

Установить курсор в конец текста тоже проблем не представляет:

//ставим курсор в конец текста
txtSampleText.SelectionStart = txtSampleText.Text.Length;

Выделение исчезнет, а курсор будет в начале или конце текста.

Скрытие курсора переводом фокуса

Для того, чтобы визуально скрыть текстовый курсор в TextBox, можно перевести фокус на другой объект формы. Например, далее переведем фокус на кнопку btnClose, находящуюся рядом с TextBox:

//убираем курсор (сменой фокуса на другой элемент формы)
btnClose.Select();

Но смена фокуса иногда влечет за собой нежелательные последствия, например текст нельзя будет прокручивать колесиком мышки. Если нужно, чтобы фокус оставался в TextBox, а каретка (текстовый курсор) не отображалась, стоит воспользоваться WinAPI.

Использование WinAPI для скрытия текстового курсора (каретки)

Сначала экспортируем WinAPI функцию:

public frmHideCaret()
{
    InitializeComponent();
}

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool HideCaret(IntPtr hWnd);

//...

Потом вызываем ее в обработчике события Shown (если вызвать, например в Load не сработает, надо чтобы форма появилась):

private void frmHideCaret_Shown(object sender, EventArgs e)
{
    HideCaret(txtSampleText.Handle);
}

Весь пример на GitHub

Смотреть в репозитарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *