2011-04-06 3 views
0

한 폼 내에서 다른 폼을 표시하거나 숨기거나 닫을 수 있기를 원합니다. 아이디어는 내 프로그램이 하나의 양식으로 시작하고 다른 양식을 보여줄 일부 단추가 있다는 것입니다. 즉, 사용자가 다른 양식을 가져 오기 위해 버튼을 클릭하면이 기본 양식이 최소화되어야하고 사용자가 다른 양식을 닫을 때마다이 양식이 정상 또는 최대화 상태로 돌아갑니다.여러 폼을 제어 C에서 하나의 폼으로 표시, 숨기기 또는 닫기 #

namespace MultipleForms 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    /* 
    * I want to make a public reference to this Form1 
    * So that when user closes Form2 That is F2 this form will be 
    * set back to normal or maximized state 
    */ 

    private void buttonStartForm2_Click(object sender, EventArgs e) 
    { 
     //Declare Form2 
     Form2 F2 = new Form2(); 

     //Show Form2 
     F2.Show(); 

     //Minimize Form1 
     this.WindowState = FormWindowState.Minimized; 

    } 
} 
} 

그리고이 Form2.cs

namespace MultipleForms 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     //FormClosed event handler 
     private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      //Closing Form2 
      this.Close(); 

      //Now I need a code to make Form1 to recover from minimized 
      // state to normal or maximized state. how do I should refer to it? 
     } 
    } 
} 

이다 나는 어떤을 할 수 있다고 생각 :

코드는 다른 형태 (Form1.cs를가) 제어 내 주요 양식과 같습니다 물건을 닫는 이벤트에 물건을,하지만 어떻게 공개로 Form1.cs initilize 수 있습니까? 또는 Form2.cs에서 Form1.cs도 초기화해야합니까?

namespace MultipleForms 
{ 
static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
} 
} 

추신 :이 Form2를 한스 솔루션을 사용

UPDATE

을 가리는하지 폐쇄해야한다는 crtitical입니다, 그것은 또는 어쩌면 Program.cs 파일을 통해 수행해야 내가 제대로 이해한다면, 당신은 폼 닫기 이벤트에 연결할 수

private bool isEnabledCmpFrm = false; 

    public void buttonStartComparisonForm_Click(object sender, EventArgs e) 
    { 

     if (!isEnabledCmpFrm) 
     { 
      ComparisonForm CmpFrm = new ComparisonForm(); 
      CmpFrm.Show(); 
      CmpFrm.WindowState = FormWindowState.Normal; 
      this.WindowState = FormWindowState.Minimized; 

      isEnabledCmpFrm = true; 

      CmpFrm.FormClosed += delegate 
      { 
       this.WindowState = FormWindowState.Normal; 
       isEnabledCmpFrm = false; 
      }; 
     } 
    } 

답변

1

양식에 자체 이벤트를 수신하지 마십시오. 코드는 Form1에 있어야합니다. 이와 같이 :

 Form2 F2 = new Form2(); 
     F2.FormClosed += delegate { this.WindowState = FormWindowState.Normal; }; 
     F2.Show(); 
     this.WindowState = FormWindowState.Minimized; 
+0

고마워,이 작품은 좋지만, 표시 할 폼을 선택하기 위해 버튼을 클릭 할 때마다 그 폼 (폼의 같은 인스턴스이지만 다른 윈도우)이 실행됩니다. 어떻게 그것을 1 형식으로 제한 할 수 있습니까? 열린 양식이 닫히지 않는 한 양식의 새 인스턴스를 다시 작성해야합니다. –

+0

새로운 질문을 시작하십시오. –

2

: 가장은이 방법을 사용할 수 있습니다. 당신은 때 다시 자식 폼의 기본 폼에 대한 참조를 전달하고 그것을 볼 수 있도록 기본 폼의 표시 방법을 사용할 필요가

Form2 form2 = new Form2(); 
form2.Show(); 
form2.FormClosing += new FormClosingEventHandler(form2_FormClosing); 


    void form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     this.Show(); 
    } 
+0

내 대답을 무시하고,이 말이 더 합리적입니다. 주 폼의 상태 논리는 주 폼에 유지됩니다. – digitlworld

+0

@Digitlworld 그런 다음 답을 삭제하는 것을 고려해보십시오. –

0

:

그래서 당신의 주요 형태로 당신이 뭔가를 할 수 있습니다 아이 양식이 닫힙니다.

관련 문제