我在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中可以访问Form
是否正常(甚至可能)?
答案 0 :(得分:2)
是的,这是可能的。句柄是窗体的窗口句柄,在窗体实际上有一个窗口(可见或不可见)之前,它可能不会被创建。
答案 1 :(得分:2)
在没有句柄的.NET中可以访问Form是否正常(甚至可能)?
是的,因为Form(或者那个控件)只是围绕几个Win32 API调用的包装类。用于创建表单的代码用于创建.NET对象。
最有可能只有在显示表单时,才会调用Win32,最后给控件一个句柄。