Инициализировать дескриптор окна для формы и дочерних элементов управления без отображения - PullRequest
4 голосов
/ 02 июня 2011

Есть ли способ программно заставить форму и все ее дочерние элементы управления иметь дескрипторы окна, чтобы она не была видна?Похоже, что CreateControl будет делать это, но это работает, только если элемент управления виден.Запрос дескриптора формы дает форму дескриптора, но не дает дескрипторы для всех дочерних элементов управления, и я не хочу перебирать все дочерние элементы управления вручную, заставляя их иметь дескрипторы.

В настоящее времяЯ прибегаю к тому, чтобы сделать форму видимой на долю секунды, а затем скрыть ее, что кажется мне довольно хакерским решением.Есть ли лучший способ?

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Я не понимаю, почему вам не нравится повторяться. Это кажется хорошим решением для меня. Я бы воспользовался возможностью, чтобы создать многократно используемый итератор рекурсивного управления.

Однако, если вы не хотите этого делать, вы можете попробовать простой вариант вашего текущего решения. Перед тем, как сделать форму видимой, установите ее положение, чтобы она не отображалась на мониторе. Затем, когда вы прячете его снова, восстановите правильную позицию.

0 голосов
/ 02 июня 2011

Если вы хотите создать дескрипторы окна, фактически не видя форму, вы можете сделать это:

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