Частично выделите текст ячейки DataGridView при нажатии - PullRequest
0 голосов
/ 20 февраля 2019

Есть ли способ программным образом выбрать определенную часть текста ячейки DataGridView, когда пользователь вводит ее?
Например, если пользователь входит в ячейку и вводит hello world взатем он снова входит в ту же ячейку, автоматически выбирается подстрока world (т.е. без действий пользователя).

Как это:

enter image description here

1 Ответ

0 голосов
/ 20 февраля 2019

Возможное решение с использованием события EditingControlShowing .e.Control член DataGridViewEditingControlShowingEventArgs ссылается на элемент управления для редактирования текущей ячейки.
После проверки, имеет ли тип элемента управления для редактирования тип DataGridViewTextBoxEditingControl e.Control приводится к классу TextBoxBase , который предоставляет метод Select () , используемый для выбора текста ячейки.

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

Обновление :
Как отмечается в комментариях Реза Агаи , Вызов действия в этом контексте также приведет к тому же результату (даже лучше).

Этот метод выбирает последнее слово текста или весь текст, если есть только одно слово.Может быть легко адаптирован для выбора любого другого раздела текста.

Пример функциональности:

DataGridView EditingControlShowing

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (!(e.Control is DataGridViewTextBoxEditingControl)) return;

    TextBoxBase editControl = (TextBoxBase)e.Control;
    var cellText = editControl.Text;
    if (cellText?.Length > 1)
    {
        BeginInvoke(new Action(() => {
            string word = cellText.Split().Last();
            editControl.Select(cellText.Length - word.Length, word.Length);
        }));
    }
}
...