初始化窗体和子控件的窗口句柄而不显示

Posted

技术标签:

【中文标题】初始化窗体和子控件的窗口句柄而不显示【英文标题】:Initialize window handle for form and child controls without displaying 【发布时间】:2011-09-07 01:36:28 【问题描述】:

有没有办法以编程方式强制窗体及其所有子控件具有窗口句柄而不可见?看起来 CreateControl 会这样做,但这似乎只有在控件可见时才有效。请求表单的句柄会为表单提供句柄,但不会为所有子控件提供句柄,而且我真的不想手动遍历所有子控件以强制它们具有句柄。

目前,我正在求助于让表单在瞬间可见,然后将其隐藏,这对我来说似乎是一个非常老套的解决方案。有没有更好的办法?

【问题讨论】:

【参考方案1】:

我不明白你为什么不喜欢迭代。这对我来说似乎是一个很好的解决方案。我会借此机会构建一个可重用的递归控制迭代器。

但是,如果您不想这样做,则可以在当前解决方案上尝试一个简单的变体。在使表单可见之前,请设置其位置,使其不会出现在任何监视器上。然后当你再次隐藏它时恢复正确的位置。

【讨论】:

我想遍历孩子并不是什么大问题,只是对我来说有点难看。我想这就是我要去做的。【参考方案2】:

如果你想创建窗口句柄而不实际看到窗体,你可以这样做:

  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);
  

【讨论】:

以上是关于初始化窗体和子控件的窗口句柄而不显示的主要内容,如果未能解决你的问题,请参考以下文章

如何获取窗体中组件的句柄

C#获取当前窗体句柄及该窗体里的信息

WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。

WPF的控件没有句柄,但是有啥其他间接方法获得WPF控件的句柄啊。

知道一个窗体的句柄,如何获取这个窗体

vb 获取窗口句柄