在dataGridView中调用dispose后调用OnLostFocus

时间:2010-09-12 14:50:16

标签: c# datagridview

我有一个继承dataGridView控件的控件。 我重写了onLostFocus方法。最近我遇到了一种奇怪的行为。如果在单元格处于编辑中间时尝试关闭表单。将调用dispose方法,然后调用onLostFocus,导致nullReferenceException

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

我的问题是在userControl开始处理后如何调用lostFocus? 什么是处理这个问题的正确方法? 解决方法可以是显式检查dispose是否已启动,然后从OnLostFocus返回。但我宁愿更好地了解背后发生的事情。 谢谢!

1 个答案:

答案 0 :(得分:3)

根据http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx,Microsoft建议使用OnEnterOnLeave代替OnGotFocusOnLostFocus

  

GotFocus和LostFocus事件是   与之相关的低级焦点事件   到WM_KILLFOCUS和WM_SETFOCUS   Windows消息。通常,   只有GotFocus和LostFocus事件   更新UICues时使用或何时使用   编写自定义控件。 相反   应使用Enter和Leave事件   对于除表格之外的所有控件   class,使用Activated和   停用活动。更多   关于GotFocus和。的信息   LostFocus事件,请参阅WM_SETFOCUS   和WM_KILLFOCUS主题   “键盘输入参考”部分   MSDN库在   http://msdn.microsoft.com/library.http://msdn.microsoft.com/library