Как перейти к следующей ячейке, когда пользователь нажимает стрелку вниз в конце текста в DataGridViewTextBoxEditingControl

У меня есть приложение winforms с DataGridView, который имеет несколько многострочных текстовых ячеек. Поведение DataGridViewTextBoxEditingControl по умолчанию кажется странным. По какой-то причине, если ячейка редактируется, а выделение находится в самом конце текста (в конце самого последнего слова в последней строке), если пользователь нажимает клавишу со стрелкой вниз, он устанавливает выбор обратно к началу текста в этой ячейке (не выходя из режима редактирования) вместо переноса их в следующую ячейку. Если при редактировании любой строки, кроме последней, будет нажата стрелка вниз, точка вставки переместится на следующую строку, как и ожидалось. Если при редактировании последней строки нажимается стрелка вниз, но не в самом конце строки, редактирование заканчивается, и следующая ячейка (ниже) становится новой текущей ячейкой. Есть ли (хороший / простой) способ изменить это поведение? Я придумала это решение, но я не очень счастлива из-за необходимости вставлять код kludgey, чтобы исправить то, что кажется ошибкой в ​​элементе управления.Net.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (msg.WParam.ToInt32() == (int)Keys.Down &&
        IsCurrentCellInEditMode && EditingControl is DataGridViewTextBoxEditingControl &&
        ((DataGridViewTextBoxEditingControl)EditingControl).SelectionStart == EditingControl.Text.Length)
    {
        EndEdit();
        if (CurrentCellAddress.Y < RowCount - 1)
            CurrentCell = this[CurrentCellAddress.X, CurrentCellAddress.Y + 1];
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

0 ответов

Другие вопросы по тегам