2013-06-25 2 views
1

나는 모든 제안 된 해답을 살펴 보았고 내가 원하는 것을 찾지 못했습니다. 내 기본 양식에서 두 번째 양식을 호출하고, 두 번째 양식이 활성화되어있는 동안 내 기본 양식을 숨기고, 두 번째 양식이 닫힐 때 기본 양식을 숨기기를 원합니다. 기본적으로 두 가지 형식을 "전환"하고 싶습니다.양식을 숨기고 두 번째 양식으로 전환하고 두 번째 양식을 닫고 첫 번째 양식을 숨김

지금까지 내가 가진 :

을 내 주요 형태 :

private void countClick(object sender, EventArgs e) 
{ 
    this.Hide(); 
    subForm myNewForm = new subForm(); 
    myNewForm.ShowDialog(); 
} 

내 두 번째 형태의

나는이 :

private void totalClick(object sender, EventArgs e) 
{ 
    this.Close(); 
} 

가 어떻게 기본 양식을 보여주고받을 수 있나요? 같은 공간에서 작업하는 경우

답변

0

, 당신은 mainform하거나 "기본 폼을"준 이름을 사용하여 컨텍스트가 시도 :

mainform.show(); 
+1

'메인 폼'이란 무엇입니까? 정의 된 위치는 어디입니까? 이것이 어디에 삽입되어야합니까? 더 많은 문맥을 제공하십시오. – Chris

0

당신은 참조를 전달 할 수있는 방법을 찾을 필요 메인 폼에서 두 번째 폼 클릭 이벤트 핸들러로 이동합니다.

두 번째 폼 클래스의 멤버 변수로 폼을 설정하거나 이벤트 인수를 통해 폼을 전달하여이 작업을 수행 할 수 있습니다.

2

ShowDialog은 보조 양식을 모달 대화 상자로 엽니 다. 즉, MainForm의 코드 실행이 그 시점에서 중단되고 보조 양식이 포커스를 갖게됨을 의미합니다. 그래서 당신이해야 할 일은 ShowDialog 호출 후에 this.Show을 넣는 것입니다. 위의 링크에서

: 당신은 응용 프로그램에서 모달 대화 상자를 표시하려면이 방법을 사용할 수 있습니다

. 이 메서드가 호출 될 때이 메서드는 대화 상자가 닫힐 때까지 실행되지 않습니다.

private void countClick(object sender, EventArgs e) 
{ 
    this.Hide(); 
    subForm myNewForm = new subForm(); 
    myNewForm.ShowDialog(); 
    this.Show(); 
} 
+0

현재 양식이 모달 대화 상자이고 숨길 수 있습니다 ... 모달을 죽이지 않습니까? 그렇다면 창 위쪽이나 왼쪽 위치를 그대로 유지하고 -2000과 같이 설정 한 다음 다른 양식이 닫힐 때 다시 설정하는 것이 좋습니다. – DRapp

+0

@DRapp 그는 자신의 메인 폼에서 그의 프로그램의 메인 폼이 될 것 같은 내 마음 속에서 가장 가능성이 높다고 말했다. 따라서 설명하는 시나리오는 거의 없습니다. 또한 보조 양식에서 다른 Modal Dialog 상자를 생성하는 빠른 테스트를 실행하여 Modality를 손상시키지 않았습니다. –

+0

모달 대화 상자가 원하는 것이 아닌 경우 항상 myNewForm.Show (this)를 호출 한 다음 양식/뷰를 호출 할 수있는 부모로 폼에 대한 참조를 가질 수 있습니다. – Mataniko

1

당신이 Form2

Form2 frm2 = new Form2(); 
frm2.Activated += new EventHandler(frm2_Activated); // Handler when the form is activated 
frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed); // Hander when the form is closed 
frm2.Show(); 

는 이제 Form2가 표시 될 때,이 하나 또는 당신이이 경우에 호출 양식을 숨길 Activated입니다 보여주기 위해 버튼을 클릭의이 Form1에 말을하자 Form1

private void frm2_Activated(object sender, EventArgs e) 
    { 
     this.Hide(); // Hides Form1 but it is till in Memory 
    } 

그런 다음 Form2이일 때UnhideForm1입니다.

private void frm2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     this.Show(); // Unhide Form1 
    } 
1

올바르게 수행하기가 어렵습니다. 문제는 이 포커스를 얻을 수있는 창을 전혀 필요로하지 않아야한다는 것입니다. Windows 창 관리자는 포커스를 제공 할 다른 창을 찾아야합니다. 그것은 다른 응용 프로그램의 창입니다. 창문 뒤에 창이 사라질 것입니다.

기존 코드 조각의 경우 이미 대화 상자를 표시하기 전에 기본 창을 숨길 수 있습니다. 그 은 보통으로 밝혀졌습니다. 단, 대화창이 느리게 생성되는 경우는 예외입니다. 대화 상자가 닫힐 때 확실히 발생합니다.

그래서 당신이해야 할 당신이 대화 상자를 표시하고 다시 전에 대화 상자가 닫히고을 보여 후 창을 숨길 수 있습니다. 그건 속임수가 필요해. 그들은 다음과 같이 :

private void countClick(object sender, EventArgs e) 
{ 
    this.BeginInvoke(new Action(() => this.Hide())); 
    using (var dlg = new subForm()) { 
     dlg.FormClosing += (s, fcea) => { if (!fcea.Cancel) this.Show(); }; 
     if (dlg.ShowDialog() == DialogResult.OK) { 
      // etc... 
     } 
    } 
} 

BeginInvoke() 호출 코드는 ShowDialog를() 메소드가 실행 된 이후에 실행 갈 수있는 트릭입니다. 따라서 대화 창을 표시 한 후에 창을 숨길 수 있습니다. 대화 상자의 FormClosing 이벤트는 대화 상자가 닫히기 직전에 창을 다시 볼 수있게하는 데 사용됩니다.

관련 문제