OnLostFocus вызывается после вызова dispose в dataGridView - PullRequest
1 голос
/ 12 сентября 2010

У меня есть элемент управления, наследующий элемент управления dataGridView.Я переопределил метод onLostFocus.В последнее время я столкнулся со странным поведением.если попытаться закрыть форму, когда ячейка находится в середине редактирования.будет вызван метод dispose, а затем вызывается onLostFocus, что приводит к nullReferenceException

   protected override void OnLostFocus(EventArgs e)
        {
           base.OnLostFocus(e);
          base.DefaultCellStyle = myStyle1;
            }
        } 

. Мой вопрос: как получается, что lostFocus вызывается после того, как userControl начинает утилизироваться?и как правильно справиться с этой проблемой?Обходной путь может заключаться в том, чтобы явно проверить, началось ли удаление, а затем вернуться из OnLostFocus.Но я бы лучше понял, что происходит позади.Спасибо!

1 Ответ

3 голосов
/ 12 сентября 2010

Согласно http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx, Microsoft предложила использовать OnEnter и OnLeave вместо OnGotFocus и OnLostFocus.

События GotFocus и LostFocus являются низкими-уровневые события фокуса, связанные с сообщениями Windows WM_KILLFOCUS и WM_SETFOCUS.Как правило, события GotFocus и LostFocus используются только при обновлении UICues или при написании пользовательских элементов управления. Вместо этого события Enter и Leave должны использоваться для всех элементов управления , за исключением класса Form, который использует события Activated и Deactivate.Для получения дополнительной информации о событиях GotFocus и LostFocus см. Разделы WM_SETFOCUS и WM_KILLFOCUS в разделе «Справочник по вводу с клавиатуры» в библиотеке MSDN по адресу http://msdn.microsoft.com/library.http://msdn.microsoft.com/library.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...