我有一个用户控件,它有几个子元素,包括复选框和文本框。
我只想在整个用户控件上失去焦点(例如单击用户控件之外的按钮)时才为我的用户控件触发 LostFocus 事件。
目前,当我在用户控件的子元素之间移动(例如从一个文本框到另一个文本框)时,也会触发 LostFocus 事件。
我有一个用户控件,它有几个子元素,包括复选框和文本框。
我只想在整个用户控件上失去焦点(例如单击用户控件之外的按钮)时才为我的用户控件触发 LostFocus 事件。
目前,当我在用户控件的子元素之间移动(例如从一个文本框到另一个文本框)时,也会触发 LostFocus 事件。
protected override void OnLostFocus(EventArgs args)
{
if (!ContainsFocus)
{
// Only do something here
}
}
诀窍是检查 ContainsFocus
在您的构造函数中,您可能必须通过调用添加类似于以下内容的代码来捕获您的子控件失去的焦点(因为当它们失去焦点到其他地方时您不会得到直接通知)
CaptureLostFocus(this);
并实施:
void CaptureLostFocus(Control control)
{
foreach(Control child in control.Controls)
{
child.LostFocus += (s, e) => OnLostFocus(e);
CaptureLostFocus(control);
}
}