2

我有一个带有 DataGridView 的 winforms 应用程序,其中包含一些多行文本单元格。DataGridViewTextBoxEditingControl 的默认行为看起来很奇怪。出于某种原因,如果正在编辑一个单元格并且选择位于文本的最后(在最后一行的最后一个单词的末尾),如果用户按下向下箭头键,它会将选择设置回到该单元格中文本的开头(不离开编辑模式),而不是将它们带到下一个单元格。如果在编辑除最后一行以外的任何行时按下向下箭头,则插入点会按预期移动到下一行。如果在编辑最后一行但不是在该行的最末尾按下向下箭头,则编辑结束并且下一个单元格(下方)成为新的当前单元格。有没有(好的/简单的)方法来改变这种行为?我想出了这个解决方案,但我对不得不输入杂乱无章的代码来修复.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);
}
4

0 回答 0