我有一个继承dataGridView控件的控件。 我重写了onLostFocus方法。最近我遇到了一种奇怪的行为。如果在单元格处于编辑中间时尝试关闭表单。将调用dispose方法,然后调用onLostFocus,导致nullReferenceException
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
base.DefaultCellStyle = myStyle1;
}
}
我的问题是在userControl开始处理后如何调用lostFocus? 什么是处理这个问题的正确方法? 解决方法可以是显式检查dispose是否已启动,然后从OnLostFocus返回。但我宁愿更好地了解背后发生的事情。 谢谢!
答案 0 :(得分:3)
根据http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx,Microsoft建议使用OnEnter
和OnLeave
代替OnGotFocus
和OnLostFocus
。
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