我有一个User Control,它有几个子元素,包括复选框和文本框。
我想在整个用户控件上丢失焦点时触发用户控件仅的LostFocus事件(例如,单击用户控件外部的按钮)。
目前,当我在用户控件的子元素之间移动时,LostFocus事件也会触发,例如从一个文本框到另一个文本框。
答案 0 :(得分:-1)
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);
}
}