Есть ли способ загрузить все элементы управления UI перед отображением? C # winform - PullRequest
4 голосов
/ 03 февраля 2010

У меня сложная форма выигрыша с большим количеством элементов управления и громоздкими перерисовками, изменением размера и позиционированием элементов управления в соответствии с пользовательским экраном, поэтому форма отображается во время визуализации и перерисовки

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 03 февраля 2010

Возможно использование SuspendLayout () и ResumeLayout () будет работать.

Из MSDN:

SuspendLayout и ResumeLayout методы используются в тандеме для подавления несколько событий Layout, пока вы настроить несколько атрибутов контроль. Например, вы бы обычно вызывают SuspendLayout метод, затем установите размер, местоположение, Свойства привязки или дока контролировать, а затем вызвать ResumeLayout метод, чтобы включить изменения вступают в силу.

1 голос
/ 06 февраля 2010

@ У Кевина правильная идея, и я бы использовал такой подход:

  1. Перетащите панель на форму и установите Dock на Fill, чтобы он покрывал всю форму.
  2. Перетащите ProgressBar в центр панели со свойством Style, установленным в Marquee. Это заставит его постоянно прокручиваться.
  3. Теперь, в конце конструктора вашей формы (или обработчика события Load, если вы его используете), вызовите метод SendToBack () вашей панели, чтобы отобразить полностью визуализированные элементы управления.
1 голос
/ 06 февраля 2010

в вашей главной:

    MyMainForm hostInterface;

    static void Main( )
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        hostInterface = new HostInterface();
        // do some stuff to get the form ready
        // here you can optionally instance a splash screen
        MySplashScreen splash;
        hostInterface.Load += splash.Close();    // <- might not be 100% accurate
        splash = new MySplashScreen();


        Application.Run(hostInterface);
    }

Посмотрите, как это работает для вас. Разница в том, что вы создаете экземпляр формы до запуска чего-либо. Я добавил опцию для создания заставки.

Сравните вышеприведенное со стандартным автоматически сгенерированным кодом:

static void Main( )
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new MyMainForm());
        }

Даже без добавления заставки я обнаружил, что объявление MyMainForm myform = new MyMainForm() было лучше при загрузке всех элементов управления до Application.Run(new MyMainForm())

1 голос
/ 03 февраля 2010

Вы можете создать панель «Загрузка» и временно накрыть ею всю форму, пока все загружается. Возможно, вы можете попробовать вызвать PerformLayout на ваших менеджерах компоновки перед вызовом Form.Show, чтобы заставить их загружать фронтальную задачу макета.

Заставка достаточно проста. Вы можете просто показать верхнюю форму и закрыть ее, когда ваша основная форма будет показана, возможно, в событии Activated.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...