2013-08-12 2 views
3

나는 실행되는 간단한 프로그램을 가지고 있지만 그 전에 정보가 올바른지 확인하는 로그인 폼이 나옵니다. 그럴 경우 로그인 양식이 닫히고 기본 양식이 시작됩니다. 그러나 기본 양식을 연 후에 로그인 양식을 닫으면 전체 응용 프로그램이 종료됩니다.로그인 폼을 사라지게 하시겠습니까?

내 program.cs는 새로운 frmLogin을 실행합니다. 로그인 할 때 발생하는 현상입니다.

frmMain frm = new frmMain(UsernameTextBox.Text, PasswordTextBox.Text); 
frm.Show(); 
this.Close(); 

어떻게 억제 할 수 있습니까? 감사합니다.

+1

대화 상자의 부모를 닫거나 다른 대화 상자를 닫을 때 program.cs에서 열려면 별도의 줄을 추가해야합니다. 다른 방법으로 열면 로그인 양식이로드되게하십시오. 양식, 잘못된 로그인 인 경우 두 양식 모두 닫음 – Sayse

답변

0

새 양식 대신 Panel을 사용할 것을 제안합니다. 로그인 컨트롤을 Panel에 놓고 먼저 표시하십시오. 사용자 로그인이 성공하면 패널을 보이지 않게하거나 양식에서 제거하십시오. 그런 다음 기본 폼 컨트롤이있는 패널을 표시합니다.

if(IsLoginSuccess) 
{ 
    panel.Visible = false; 
    mainFormControlsPanel.Visible = true; 
} 

또한 내가 생각하는 방식보다 빠릅니다.

희망이 있습니다.

+1

모든 컨텐츠를 스왑 핑하여 완전히 다른 여러 기능을 수행하는 단일 양식을 갖는 것이 매우 혼란 스럽습니다. 논리적으로는 두 가지 형태가 있기 때문에 두 가지 형태가 바람직합니다. – Servy

2

응용 프로그램이 실행되는 대부분의 시간 동안 활성 상태가 아니며 인 논리적 양식이 기본 양식으로 사용되어서는 안됩니다. 너의 어플리케이션.

program.cs 파일로 이동하여 양식이 Application.Run이되도록 설정하십시오. 그러면 응용 프로그램의 기본 양식이됩니다. 기본 양식의 Load 이벤트에서 Hide입니다. 로그인 양식을 표시하려면 ShowDialog을 사용하십시오. 로그인 양식이 닫히면 기본 양식을 계속로드 할 수 있습니다.

static void Main(string[] args) { 
     var formLogin = new FormLogin(); 
     formLogin.ShowDialog(); 
     Application.Run(new FormMain(formLogin.UserName, formLogin.Password)); 
} 
0

내가 좋아하는 뭔가를 제안

DialogResult result = DialogResult.Cancel; 

while (result != DialogResult.OK) 
{ 
    using (LoginForm loginForm = new LoginForm()) 
    { 
     result = loginForm.ShowDialog(); 

     if (result != DialogResult.OK) continue; 

     if (!AuthenticateCredentialsSomehow.Authenticate(loginForm.Username, loginForm.Password)) 
     { 
      MessageBox.Show("Login Failed!"); 
      result = DialogResult.Cancel; 
      continue; 
     } 

     MainForm mainForm = new MainForm(loginForm.Username, loginForm.Password); 
     Application.Run(mainForm); 
    } 
} 

로그인 양식을 멀리 할 때 갈 것입니다 이런 식으로 그것으로 끝나면 로그인이 성공하면 응용 프로그램은 기본 폼에서 실행됩니다.

+1

이것은 작동합니까? 'Event.Run'은 전체 이벤트 루프를 실행하는 데 필요하지 않습니까? 아니면'ShowDialog()'가 자체적으로 가지고 있습니까? – Codecat

+0

@AngeloGeels - 작동합니다. 답변을 게시하기 전에 대개 먼저 솔루션을 시도합니다. –

+0

니스! 나는 그것을 몰랐다. – Codecat

0

당신은 더 같은 그것을 위해 program.cs를 설정해야합니다 :

-1

Show() 대신 양식을 모달로 표시하므로 ShowDialog()를 사용하십시오. 이렇게하면 사용자가 로그인 화면을 무시하는 것을 방지 할 수 있습니다.

+0

그는 로그인 양식이 아닌 주요 양식을 모범적으로 보여 주었으며이 질문에 대한 답변도 아닙니다. – Servy

관련 문제