2011-06-13 2 views
0

I는를 Form1 내의 버튼 클릭에 형식 2를 개방하고 검출 다음 형식 2는 Form1에 버튼을 클릭하면, 이미 열려있는 경우 Form2 f2 = new Form2()열린 형태

하면 다시 열려 형식 2 인 것을 알 수있다. 하지만 Form2가 이미 열렸을 때 열려서는 안된다.

Form2가 닫히면 단추를 다시 클릭하면 Form2가 표시됩니다 (Form2가 닫히거나 인스턴스가 실행되고 있지 않음).

어떻게이 작업을 수행 할 수 있습니까?

EDIT : Form2가 열려있을 때 열지 않아야합니다.

+3

당신은 양식의 이름을합니다. – SLaks

+0

@SLaks 나는 이것이 포스터가 자신의 양식에 이름을 붙여야한다고 말한 것을 오늘 보았을 때 두 번째라고 생각합니다. –

+0

@Denis : 예,하지만 다른 사용자 (매우 비슷한 질문이 있음)였습니다. http://stackoverflow.com/ 질문/6333644/정보 교환 손실없이 형태 전환 – SLaks

답변

2

Application.OpenForms 속성을 사용하여 열려있는 모든 Windows 폼의 컬렉션을 반환 할 수도 있습니다. 이 컬렉션을 검색하여 Form1 (또는 Form2)이 현재 열려 있는지 확인할 수 있습니다. (앱이 배경에 있었던 경우, 윈도우 캡션 또는 플래시)

만든 후
0

두 번째 양식의 기존 인스턴스를 보유하는 첫 번째 양식의 필드를 만들어야합니다.

가 SLaks 외에도
OtherForm form; 

void Something() { 
    if (form == null) 
     form = new OtherForm(); 
    form.Show(); 
} 
1

, 당신은

void Something() { 
    if (form == null || form.IsDisposed) 
     form = new OtherForm(); 
    form.Show(); 
} 

을 가지고 또한 나는 form.Activate() helpfull을 찾을 수 있도록 당신이 얻을 수 있도록, 또한 form.IsDisposed을 확인 답 : 예를 들어

폼의 포커스

0
  • Show 형태,
  • Activate 양식을 앞으로 가져옵니다. 이 경우 양식 Visible이 true로 설정되어 있어야하지만 Visual Studio에서는이 속성이 기본값입니다.

    private void ShowForm1(object sender, EventArgs e) 
    { 
        if (this.form1 == null) 
        { 
         this.form1 = new Form1(); 
         this.form1.Show(); 
        } 
        else 
        { 
         this.form1.Activate(); 
        } 
    } 
    
+0

제발 내 편집을 참조하십시오 – sqlchild