チェックボックスやテキストボックスなど、いくつかの子要素を持つユーザーコントロールがあります。
ユーザーコントロール全体でフォーカスが失われた場合(たとえば、ユーザーコントロールの外側のボタンをクリックした場合)にのみ、ユーザーコントロールの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);
}
}