6

チェックボックスやテキストボックスなど、いくつかの子要素を持つユーザーコントロールがあります。

ユーザーコントロール全体でフォーカスが失われた場合(たとえば、ユーザーコントロールの外側のボタンをクリックした場合)にのみ、ユーザーコントロールのLostFocusイベントをトリガーしたいと思います。

現在、LostFocusイベントは、ユーザーコントロールの子要素間(たとえば、あるテキストボックスから別のテキストボックス)に移動したときにもトリガーされます。

4

1 に答える 1

-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);
      }
}
于 2013-03-19T13:03:50.340 に答える