2011-07-29 16 views
0

Windows CE 5.0의 응용 프로그램에 Compact Framework 2.0을 사용하고 있습니다.C#에서 이미 열려있는 다른 폼을 제어하십시오.

다른 양식 간의 제어를 변경하는 데 문제가 있습니다.

이것을 보여주기 위해 간단한 예제를 만들었습니다.

두 개의 양식이 있다고 가정하면 첫 번째 양식에는 두 번째 양식을로드하기위한 버튼이 있습니다.

버튼을 클릭하고 두 번째 양식이로드되면 첫 번째 양식으로 돌아가려면 컨트롤이 필요하거나 두 번째 양식이로드되면 첫 번째 양식을 닫고 싶을 수도 있습니다. 여기

번째 하나가로드되면 제 형태 개폐 대한 예이다 :

public partial class Form1 : Form 
{ 
    private void button1_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
     Form2 secondForm = new Form2(); 
     secondForm.Show();    
    } 
} 

그러나 불행하게도이 두 형태의 현재의 하나 (유치원 1)뿐만 아니라 닫는다.

그래서이 코드는 두 번째 형식 코드 안에 있어야한다고 생각하지만 첫 번째 형식을 액세스하는 방법을 모르겠습니다.

제안 사항?

답변

4

두 폼이 닫히는 이유는 Form2의 부모가 Form1이기 때문입니다. WinForms가 작동하는 방식은 부모가 닫히면 (this.Close()) 자식이 자동으로 닫히게됩니다.

이 작업을 수행하는 일반적인 방법은 실제로 secondForm.ShowDialog()를 사용하는 것입니다. 이렇게하면 백그라운드에서 첫 번째 양식이 유지되지만 선택 취소 할 수 있습니다. 당신이 그것을 대신 현재 양식 숨기기를 제거 할 경우 :

this.Hide(); 
Form2 secondForm = new Form2(); 
secondForm.Show(); 

당신은 아마 다음 this.Show()를 호출 secondForm.Closed 이벤트에 매여하는 방법, 양식 재 - 표시되도록 할 것 .

+0

일단 첫 번째 양식이 숨겨지고 두 번째 양식이로드됩니다. 두 번째 형식의 이벤트를 닫힌 이벤트에 연결하고 this.Show()를 호출하면 프로그램이 모두 닫힙니다. 버튼 클릭 이벤트에서 this.Show()를 호출하면 아무 일도 일어나지 않습니다. 이것은 this.Show()가 두 번째 형식을 나타내며 첫 번째 (또는 부모) 형식을 나타내지 않기 때문입니다. – rfc1484

+0

@ rfc1484 : 죄송합니다. 분명하다고 생각했습니다. form2 내 이벤트를 자체 폐쇄 이벤트에 연결하지 마십시오. form2의 이벤트에 응답하여 첫 번째 양식에서 이벤트를 연결합니다. 그러면이 인스턴스는 form1에 해당합니다. – Ian

0

Form1은 귀하가 Program.cs에서 작성되고 시작된 MainForm입니다. 이 양식이 폐쇄 된 경우. 전체 신청서가 종료됩니다. lan과 같이 Form1을 숨기려고하면 이전에 표시되었거나 Controller-Class를 사용하여 두 Form을 조정합니다.

관련 문제