Я бы ожидал, что ты сделал, чтобы работать тоже.Но DataGridView - это сложный элемент управления со многими событиями, и зачастую он не работает интуитивно.Кажется, что когда происходит событие EditingControlShowing
, элемент управления еще не инициализирован, поэтому вы не можете на него повлиять.И когда происходит событие CellBeginEdit
, элемент управления еще даже не создается.
Должен быть и, вероятно, лучший способ сделать это, но я заставил его работать, используя событие CellEnter
:
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl))
{
dgv.BeginEdit(false);
((TextBox)dgv.EditingControl).SelectionStart = 0;
}
}
Поэтому, когда ячейка введена, я просто перехожу прямо в режим редактирования, но я передаю false в BeginEdit()
, который говорит ей не выбирать никакой текст.Теперь элемент управления редактированием полностью инициализирован, и я могу установить SelectionStart
в ноль, чтобы переместить курсор в начало текста.
Если ячейка не является текстовым полем, я ничего не делаю.
Если хотите, вы можете сделать
dgv.EditMode = DataGridViewEditMode.EditProgrammatically;
, чтобы иметь полный контроль над началом редактирования, но я считаю, что в этом нет необходимости.