2013-06-11 4 views
3

나는 C#을 사용하여 Windows 양식 응용 프로그램을 개발했습니다.다른 폼에서 새 창을 여는 방법 C#

로그인 폼 및 기본 폼과 같은 두 가지 폼이 있습니다. 올바른 로그인 자격 증명을 입력하면 이 닫히고 (숨겨지지 않음) 로그인 폼이 표시되고 기본 폼이 표시됩니다.

는 다음 코드

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

사용하지만 I는 MDI 용기에 크로스 마크 (우측 상단 구석)을 이용하여 기본 형상을 닫을 때, 기본 형태는 애플리케이션이 계속 실행되지만, 폐쇄 작업 관리자.

이전 코드 대신 다음 코드를 사용하면 응용 프로그램이 기본 폼 표시 전에 닫힙니다.

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

메인 폼에서 mdi 컨테이너를 숨겨야합니까? 아니면이를 수행 할 수있는 방법이 있습니까? 도와주세요.

답변

5

이 같은 시도 :

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

먼저 로그인 양식을 숨 깁니다. 다음으로, 기본 양식 대화 상자를 표시하지만 "ShowDialog()"호출자가 대화 상자가 닫힐 때까지 계속하지 못하도록합니다. 마지막으로 대화 상자가 닫히면 로그인 양식을 닫고 응용 프로그램을 종료합니다.

+0

가 작동했습니다.! 고맙습니다 satson .. :) – sanzy

+0

좋은 생각, 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

Mr. Irshad는 루트 폼에서 다른 폼을 보여주고 루트 폼을 닫을 때 항상 홀 애플리케이션을 닫았 기 때문에이 대답을 수정하십시오. 올바르지 않습니다. –

0

내가 항상 것은 :

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

내 주요 형태로이 같은 Application.Exit(); 에 form_closed 이벤트 핸들러를 설정할 때 :

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

때문에 사용자가 주를 닫기를 클릭 할 때 모든 신청이 중지됩니다

0

나는 받아 들인 대답이 어느 정도 부정확하다고 생각합니다. 이것은 OP가 찾고 있던 실제 답변입니다. 죄송합니다. 답변을 얻으려면 1 년이 걸렸습니다. 프로젝트의 프로그램에서 Main() 메소드 내부.사용자가 인증 또는 로그인에 성공 이벤트가 여기에 폼의 DialogResult를 = DialogResult.OK 설정이의 예입니다있는 경우는 당신의 logonForm의 내부

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

:

CS 파일은 맨 아래에 다음과 같은 복사 및 붙여 넣기
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); 
     } 
    }