複数行のテキストセルを持つ 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);
}