2013-06-11 4 views
3

У меня было разработано приложение для окон, используя C#.Как открыть форму нового окна в другой форме в C#

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

я использовал следующий код

MainForm main=new MainForm(); 
this.hide();//close login form 
main.show();//display main form 

но когда я закрыть основную форму с помощью крестик (правый верхний угол) в МДИ контейнере, основной формой закрывается, но приложение все еще работает в диспетчер задач.

Если я использую следующий код вместо предыдущего кода, приложение закрывается перед отображением основной формы.

this.close()//close login form 
main.show();//display main form 

Мне нужно скрыть контейнер mdi из основной формы или есть ли способ достичь этого? пожалуйста помоги.

ответ

5

Попробуйте так:

this.Hide(); 
Main.ShowDialog(); 
this.Close(); 

Во-первых, скрыть форму входа. Затем вы увидите диалог «Основная форма», но не позволяйте вызывающему абоненту «ShowDialog()» продолжать, пока диалог не будет закрыт. Последнее, как только диалог закрыт, вы закрываете форму входа, заканчивая приложение.

+0

его сработало.! Thanx satson .. :) – sanzy

+0

nice idea, satson – Sagotharan

+0

Я согласен, что это несколько работает так, как хотел OP, но это то, что OP не хотел делать. Он или она хотел закрыть (не скрывать) регистрационную форму. См. Мой ответ ниже для метода, когда форма входа будет закрыта и запускает основную форму при успешном входе в систему. – waltmagic

1

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

Вы можете подписаться на событие Закрыть в MainForm и вручную выйти из приложения через Application.Exit().

Другой вариант, чтобы убедиться, есть только одно окно живым: открытая MainForm в обработчике в LoginForm.Close событие, как описано здесь: Windows Forms: Change application mainwindow at runtime

MyForm1 f = new MyForm1(); 
f.Close += OnOpenOverviewWin(); 
Application.ShutdownMode = ShutdownMode.OnLastWindowClose; 
Application.Run(f); 

void OnOpenOverviewWin() 
{ 
    if (loginok) 
    { 
    MyOverViewForm f = new MyOverViewForm(); 
    f.Show(); 
    } 
} 
0

Вы должны показать основную форму перед закрытием формы входа. попробовать это:

main.show();//display main form 
this.close()//close login form 
+0

Вы пробовали это ishad ,. когда я пытаюсь использовать этот код, мое приложение для приложения закрыто. – Sagotharan

+0

Г-н Иршад, пожалуйста, исправьте этот ответ, вы неверны, потому что, когда вы показываете другую форму из корневой формы и закрываете ее корневую форму, она всегда закрывается. –

0

То, что я всегда делаю это:

MainForm main=new MainForm(); 
Visible = false; 
main.Show(); 

и когда в моей главной форме я поставил form_closed обработчик события Application.Exit(); как это:

private void main_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    Application.Exit(); 
} 

поэтому, когда пользователь нажимает закрыть основной все приложения останавливаются

0

Я думаю, что принятый ответ некорректен. Это фактический ответ, который ищет OP. Извините, потребовался год, чтобы получить ответ. Внутри вашего метода Main() в программе вашего проекта.CS-файл, скопируйте и вставьте следующий текст в нижней части:

 Logon logonForm = new Logon(); 
     if(logonForm.ShowDialog() == DialogResult.OK) 
     { 
      Application.Run(new Portal());    
     } 

Внутри вашего logonForm при аутентификации пользователя или имеет успешное мероприятие Логин установить форму в DialogResult = DialogResult.OK Вот пример этого:

private void logonButton_Click(object sender, EventArgs e) 
    { 
     string username = usernameTextBox.Text; 
     string password = passwordTextBox.Text; 

     if(logon(username, password)) 
     { 
      MessageBox.Show("Logged On Successfully!", "Success", 
          MessageBoxButtons.OK, MessageBoxIcon.Information); 
      this.DialogResult = System.Windows.Forms.DialogResult.OK; 
     } 
     else 
     { 
      MessageBox.Show(getFailureReason(), "Failure", 
          MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
Смежные вопросы