2015-02-09 3 views
1

Текущая проблема заключается в том, что появляется «mainScreen», но сразу же закрывается, я понятия не имею, почему. Это фрагмент кода, который обрабатывает закрытие и открытие новой формы.Закрытие формы при открытии другой формы

Edit: .this относится к Login.cs (извините)

if(templogin == true && permission.Equals("1")) 
{ 
       mainScreen.IsAdmin(); 
       this.Close(); 
       mainScreen.ShowDialog(); 
} 
+0

Почему бы вам не позвонить, если вы хотите его показать? –

+0

Я хочу закрыть текущий экран, но открыть новый экран (который будет основным экраном приложения). – btmach

+4

'Application.Run()' в 'Program.cs', вероятно, полагается на окно' this', как только эта форма закрывает приложение. – Lloyd

ответ

5

Я думаю, вы не должны закрывать приложение (как форма Войти кажется основной формой в то время как вы запустили приложение) перед другой формой запуска: Делай так:

if(templogin == true && permission.Equals("1")) 
{ 
       this.Hide(); 
       mainScreen.IsAdmin(); 
       mainScreen.ShowDialog(); 
       this.Close(); 

} 
+0

Использование 'Show' вместо' ShowDialog', вероятно, лучше. –

+0

Да, я использовал ShowDialog для формы входа и другой формы как Show –

1

Если вы хотите запустить 2 формы (переключение от одного к другому), то вы должны сделать это в Main

Вместо

Application.Run(new StartupForm()); 

вам придется использовать

var startup = new StartupForm(); 
startup.ShowDialog(); 
if(somecondition) // when StartupForm is closed and return something (or property is set, etc) 
{ 
    var main = new MainScreen(); 
    main.ShowDialog(); 
} 

Вам не нужно Application.Run вообще при использовании ShowDialog.

+0

Я бы все еще использовал 'Application.Run (main)' внутри условия вместо 'main.ShowDialog()' для доступа к 'Application. * 'событий, но да, это сработает. – Jcl

+0

@Jcl, хорошая идея. Хотя мне трудно представить, какие события необходимы, как только вы начнете вручную управлять потоком программы. – Sinatr

+0

'ThreadExit',' ThreadException' и т. Д., Также у вас будет доступ к «OpenForms» и другим утилитам (например, «UseWaitCursor» и т. Д.), Которые не работают, если у вас нет «ApplicationContext» 'и используйте цикл сообщений, который открывается ShowDialog. Имейте в виду: 'ShowDialog' ** работает **, и я не говорю иначе ... но' Application' и 'ApplicationContext' имеют очень хорошие утилиты для использования по той же цене (он также будет поддерживать несколько не- модальные формы [с использованием 'Application.Run()' без параметров после 'Show'ing форм], не имея при этом одного родителя). – Jcl

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