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

时间:2011-06-02 12:48:08

标签: c# winforms handle

有没有办法以编程方式强制窗体及其所有子控件具有窗口句柄而不显示它?它看起来像CreateControl会这样做,但只有控件可见才会起作用。请求表单的句柄给表单一个句柄,但不给所有子控件提供句柄,我真的不想手动遍历所有子控件,强制它们有句柄。

目前,我正在尝试将表单暂时显示,然后隐藏它,这对我来说似乎是一个非常糟糕的解决方案。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果要创建窗口句柄而不实际看到窗体,可以执行以下操作:

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