У меня есть DataGridView, который установлен на EditOnF2. Я делаю некоторую специальную обработку данных в обработчике событий CellEndEdit, который устанавливает значение ячейки. Я все еще хочу, чтобы функциональность EditOnKeystrokeOrF2 возвращалась к исходному значению при нажатии клавиши Esc. К сожалению, в обработчике событий CellEndEdit я не вижу способа сказать, что вызвало событие CellEndEdit. Я только хочу изменить значение ячейки, если клавиша Esc не нажата. Как я могу сказать, если это было или нет?
Редактировать: Стоит отметить, что событие KeyDown не запускается ни при редактировании ячейки, ни при окончательном нажатии клавиши.
Edit2: я попробовал предложение KeyPreview, но форма все еще не фиксирует нажатие клавиши Escape.
Edit3: я экспериментировал с попытками заставить это работать. Первоначально я опубликовал некоторые из следующих статей в качестве отдельного сообщения, но, возможно, было бы более уместно включить их сюда.
У меня есть ячейка в DataGridView, которая теперь имеет значение EditProgrammatics. Чтобы зафиксировать нажатие клавиши, которая начинает редактирование, я устанавливаю ячейку. Значение равно нажатию клавиши. Однако это разрушает функциональность "Escape" ячейки - когда вы нажимаете escape, вместо возврата к исходному значению, он возвращается к нажатию клавиши, которое я программно вставил в ячейку.
Я полагаю, что если бы я мог установить «EditedFormattedValue» для ячейки, это было бы то место, где я хотел бы поместить свое значение нажатия клавиши, однако это, кажется, только для чтения. Как я могу выполнить то, что я пытаюсь?
Пример для пояснения: если ячейка имеет значение «54,3», и я нажимаю клавишу «9», она начинает редактирование ячейки и помещает туда «9». Если я нажму Escape, вместо того, чтобы вернуться к «54.3», он вернется к «9». Я хочу, чтобы он вернулся к своему первоначальному значению "54,3".
Итак, я пытаюсь решить эту проблему с самого начала и до конца. Я думаю, что реальная проблема заключается в том, что я перезаписываю исходное значение и не могу определить, следует ли мне его вернуть или нет.
Edit4: похоже, что CellValidating может стоить использовать, но я вижу странное поведение, когда экспериментирую с ним. В новом проекте я создаю DataGridView и регистрируюсь для различных событий и вижу, что CellValidating запускается до CellEndEdit. Однако, в моем проекте, где я пытаюсь заставить это работать, CellEndEdit запускает ДО CellValidating. Любые идеи о том, в чем может быть разница?