代码之家  ›  专栏  ›  技术社区  ›  user271077

在DataGridView中调用Dispose后调用OnLostFocus

  •  1
  • user271077  · 技术社区  · 14 年前

    我有一个继承DataGridView控件的控件。 我重写了OnLostFocus方法。最近我遇到了一个奇怪的行为。如果在单元格处于编辑过程中试图关闭窗体。将调用Dispose方法,然后调用Teh OnLostFocus,从而导致NullReferenceException

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

    我的问题是,在用户控件开始释放后,如何调用LostFocus? 处理这个问题的正确方法是什么? 解决方法可以是显式检查Dispose是否已启动,然后从OnLostFocus返回。但我更愿意理解后面发生的事情。 谢谢!

    1 回复  |  直到 14 年前
        1
  •  3
  •   tia    14 年前

    根据 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx ,微软建议 OnEnter OnLeave 应该使用而不是 OnGotFocus OnLostFocus .

    gotfocus和lostfocus事件是 平局的低级别焦点事件 到wm_killfocus和wm_setfocus Windows消息。通常情况下, gotfocus和lostfocus事件仅 在更新uicues或何时使用 正在写入自定义控件。 相反地 应使用进入和离开事件 对于所有控件 除表格外 类,它使用激活的和 停用事件。为了更多 关于GotFocus和 lostFocus事件,请参见wm_setFocus 和wm ou killfocus主题 中的“键盘输入参考”部分 位于的msdn库 http://msdn.microsoft.com/library.http://msdn.microsoft.com/library .