2009-02-04 2 views
0

У меня есть приложение, которое использует 2 формы, главной формы и Форма Всплеск используется в следующей конфигурации:C# один форма блокировки другой в Winform проекта

public class MainForm : Form 
{ 
    public MainForm() 
    { 
     SplashScreen splash = new SplashScreen(); 

     // configure Splash Screen 
    } 
} 


public class SplashScreen 
{ 
    public SplashScreen() 
    { 
     InitializeComponent(); 

     // perform initialization 

     this.ShowDialog(); 
     this.BringToFront(); 
    } 
} 

NB: Основная форма создается с Следующий код:

Application.Run(new MainForm()); 

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

splash.Close(); 

только тогда, когда это выполняется, выполняется остальные конструкторы MainForm. как я могу легко остановить это блокирующее поведение?

+0

Похоже ошибка, скорее всего, внутри SplashScreen конструктора. Можете ли вы опубликовать этот код? –

ответ

1

Я уже ответил вам с рабочим, например, на другой вопрос, который вы просили одно и то же:

C# winforms startup (Splash) form not hiding

+0

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

0

Используйте splash.Open(), а не splash.OpenDialog(), и этого не произойдет.

1

Как правило, вам нужно отображать заставки на отдельной нити, и пусть основная нить будет продолжена с загрузкой. Не тривиально - в частности, вам нужно будет использовать Control.Invoke, чтобы попросить экран заставки закрыть себя при готовности (сродство резьбы) ...

0

В принципе, вы хотите просто показать вам форму всплеска, но не позволять ей блокировать основная форма.

Вот как я сделал это:

class MainForm : Form { 

    SplashScreen splash = new SplashScreen(); //Make your splash screen member 

    public MainForm() 
    { 
     splash.Show(); //Just show the form 
    } 

} 

Затем в MainForm_Load вы инициализацию как обычно.

Теперь, когда ваша форма готова для отображения (MainForm_Shown):

public MainForm_Shown() 
{ 
    splash.Close(); 
} 

Это позволяет ваш груз MainForm обычно во время отображения экрана заставки.

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