3

内の奇妙なコードに出くわしましたControl

if (ParentForm != null)
{
  traceBlock.Log("ParentForm is null");

  if (!ParentForm.IsHandleCreated)
  {
    ParentForm.HandleCreated += (sender, e) =>
        {
          var text = PhysDocContext.Document.GetHeader(PhysDocContext);
          ParentForm.Text = text;
        };
  }
}

このコードは、で数回起動しParentForm == nullます。ロガーが不正確な情報をログに記録していることは明らかです。奇妙なことに本当に私を驚かせるのは、をチェックすることですIsHandleCreated。私の考えでは、このコードは決して起動しません。したがって、イベントはフックされず、ヘッダーは設定されません。

さらに奇妙なのは、ParentFormがPanel親フォームが所有するコントロールに設定されていることです。また、親であるフォームによって設定されます。これはもっと不可能な状況だと私に信じさせます。

Formハンドルのない.NETでにアクセスできるのは正常ですか(可能性もあります) ?

4

2 に答える 2

2

はい、可能です。ハンドルはフォームのウィンドウハンドルであり、フォームに実際にウィンドウ(表示または非表示)が表示されるまで作成されない場合があります。

于 2012-10-10T12:41:52.407 に答える
2

ハンドルのない.NETでフォームにアクセスできるのは正常ですか(可能性もあります)?

はい。フォーム(またはそのことについてはコントロール)は、いくつかのWin32API呼び出しのラッパークラスにすぎないためです。フォームの作成に使用するコードは、.NETオブジェクトの作成に使用されます。

ほとんどの場合、フォームが表示されている場合にのみ、Win32が呼び出され、最終的にコントロールにハンドルが与えられます。

于 2012-10-10T12:43:32.017 に答える