【发布时间】:2023-03-13 23:51:01
【问题描述】:
有没有办法以编程方式强制窗体及其所有子控件具有窗口句柄而不可见?看起来 CreateControl 会这样做,但这似乎只有在控件可见时才有效。请求表单的句柄会为表单提供句柄,但不会为所有子控件提供句柄,而且我真的不想手动遍历所有子控件以强制它们具有句柄。
目前,我正在求助于让表单在瞬间可见,然后将其隐藏,这对我来说似乎是一个非常老套的解决方案。有没有更好的办法?
【问题讨论】:
有没有办法以编程方式强制窗体及其所有子控件具有窗口句柄而不可见?看起来 CreateControl 会这样做,但这似乎只有在控件可见时才有效。请求表单的句柄会为表单提供句柄,但不会为所有子控件提供句柄,而且我真的不想手动遍历所有子控件以强制它们具有句柄。
目前,我正在求助于让表单在瞬间可见,然后将其隐藏,这对我来说似乎是一个非常老套的解决方案。有没有更好的办法?
【问题讨论】:
我不明白你为什么不喜欢迭代。这对我来说似乎是一个很好的解决方案。我会借此机会构建一个可重用的递归控制迭代器。
但是,如果您不想这样做,则可以在当前解决方案上尝试一个简单的变体。在使表单可见之前,请设置其位置,使其不会出现在任何监视器上。然后当你再次隐藏它时恢复正确的位置。
【讨论】:
如果你想创建窗口句柄而不实际看到窗体,你可以这样做:
public Form1()
{
InitializeComponent();
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.ShowInTaskbar = false;
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
this.Size = new Size(0, 0);
}
【讨论】: