2014-01-10 3 views
3

Я постараюсь сделать этот вопрос как можно более простым. У меня есть три формы: frm_Splash, которая проверяет наличие обновлений; frm_Wizard, который завершает первую установку; и frm_Main, который является основной программой. Отношения этих форм на диаграммах ниже: Form Process ChartКак обработать форму показать заказ при запуске

Сейчас в Program.cs у меня есть этот код:

public static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new frm_Main()); 
} 

который устанавливает frm_Main как мой основной форме. Что лучше всего подходит для обработки frm_Wizard и frm_Main? Я не хочу, чтобы они загружались, прежде чем я закончил обновления (если они есть).

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

Наконец, после того, как все обновления и первоначальная настройка будут выполнены, основная форма покажет (но не раньше). Как это сделать?

Некоторые вещи, которые я знаю:

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

И, наконец, я ищу общий код или понятия о том, как это сделать. Я уже знаком с кодированием C#, поэтому вам не нужно все кодировать. Я просто ищу наилучшую практику, чтобы справиться с этим. т. е. Должен ли я кодировать в Program.cs или событии загрузки каждой формы? Если что-то неясно о моем вопросе, пожалуйста, дайте мне знать, прежде чем вы спуститесь! Спасибо.

+1

+1 для блок-схем. Люди, которые уделили время написанию чистых, хорошо продуманных вопросов, получат своевременные, продуманные ответы. – crush

ответ

2

Следует отметить, что для запуска формы вам не нужно использовать Application.Run. Таким образом, вы можете просто создать процесс 3 шага в вашей Main функции:

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

    //Show splash form (which checks for updates) 
    FormSplash splash = new FormSplash(); 
    splash.ShowDialog();//will wait until splash closed 

    //check if first run and show if needed 
    if(IsFirstRun()) 
    { 
     FormWizard wizard = new FormWizard(); 
     wizard.ShowDialog();//will wait until wizard is closed 
    } 

    //Finally, run your application as normal 
    Application.Run(new frm_Main()); 
} 

ПРИМЕЧАНИЯ: Я не знаю, о преимуществах использования Application.Run начятъ основной формы, я полагаю, один из них обеспечивают доступ к состоянию приложения (например, Exit), но могу сказать, что я использовал эту технику для заставки в прошлом, и у меня не было никаких проблем с этим способом.

+0

Это хорошо для OP осознать, что ему не нужно следовать шаблону, который MS ставит в метод 'Main()' – crush

+1

Именно это я и искал. Большое спасибо! Я не знал, что вы можете редактировать 'Program.cs' таким образом. Просто заметьте, я думаю, что вы должны иметь 'Application.EnableVisualStyles();' и 'Application.SetCompatibleTextRenderingDefault (false);' в начале 'Main()'. Это бросило мне ошибку, и это было решением. – gnarlybracket

Смежные вопросы