У меня есть DataGridView, подключенный к источнику данных XML. Каждый раз, когда пользователь редактирует ячейку, программа автоматически обновляет соответствующий XML-файл. Для обработки редактирования я использую оба:
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
//do edit
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//do edit
}
Редактирование работает так, пользователь нажимает на ячейку и меняет значение. Затем он должен нажать клавишу Enter , чтобы все работало нормально, но, например, если он нажимает кнопку мыши снаружи или выходит из ячейки с помощью клавиши со стрелкой влево, программа выходит из строя. Это работает в любом случае, потому что мне удалось обработать это исключение, но я хотел бы, чтобы моя программа справилась с этой ситуацией лучше. Например, когда пользователь входит в ячейку, я хочу отказать ему в переходе в другие ячейки с помощью клавиш со стрелками. Я пытался поймать событие KeyDown
, но оно не сработало:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right)) //etc...
{
e.Handled = true;
}
}
Обычно, когда начинается начало редактирования, я хочу редактировать ячейку ТОЛЬКО, если пользователь нажимает Введите . Есть идеи? Если элемент управления (в данном случае ячейка) теряет фокус во время редактирования (пользователь нажимает Esc , щелкает мышью за пределами элемента управления и т. Д.), Мне нужно предотвратить запуск события EndEdit
.