Как отобразить основную форму после загрузки элементов управления - PullRequest
1 голос
/ 04 декабря 2010

Я создаю простую программу с заставкой, которая отображается в течение 3 секунд, после заставки моя основная форма загружается. Однако, когда моя основная форма загружается, она будет в процессе загрузки всех моих элементов управления (у меня есть 36 кнопок на моей странице ... используя их для таблицы рулетки). Таким образом, в течение первых 1-2 секунд, когда отображается моя основная форма, она загружает все эти кнопки и выглядит уродливо. Как мне загрузить эту форму в течение 3 секунд моего заставки или любым другим способом? Спасибо


for (i = 0; i < 36; i++) 
{ int j, k; j = i % 3; k = i / 3; 
  button[i] = new Label(); 
  button[i].Location = new Point(80 + (41*j), 64 + (20*k)); 
  button[i].Cursor = Cursors.Hand; 
  etc etc. 
}

1 Ответ

3 голосов
/ 04 декабря 2010

Он не загружается, вы видите время, необходимое только для рисования кнопок. Вы можете легко проверить это дважды: сверните форму и восстановите ее. Это занимает 2 секунды, скорее, на высоком уровне, может быть, это просто так, или у вас очень слабое оборудование. Имея 36 кнопок, вы сможете наблюдать за картиной, особенно когда у них есть изображение. Удостоверьтесь, что изображения, которые вы помещаете на кнопку, имеют правильный размер, потому что их масштабирование в соответствии с размером кнопки стоит дорого и сокращает время рисования.

Заставка не решит эту проблему, если вы не запустите ее в Vista или Win7 с включенным Aero. Вы можете немного скрыть это с помощью свойства Opacity, которое увеличивается с 0 до 0.99 с помощью таймера. Истинное решение состоит в том, чтобы не использовать кнопки, а просто нарисовать таблицу рулетки в переопределении метода OnPaint () формы. Тем не менее, вам нужно будет добавить код для проверки нажатия мыши.

Исправление Q & D заключается в двойной буферизации всей формы, рендеринге в закадровое растровое изображение, а затем вывод результата на экран. Это не ускоряет картину, это просто больше не заметно. Вставьте этот код в класс формы, чтобы использовать встроенную поддержку для этого в Windows XP и выше:

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...