2013-02-22 3 views
0

A, B와 C는 내가 의한 frmA에서 frmB을 열고 내가 형태가 있다고 가정 : frmB B = new frmB(); B.show(); 그리고 그때까지 frmB에서 frmC 열립니다 frmC C = new frmC(); C.show(); I 양식 A와 B를 닫지 마십시오. 사용자가 해당 양식으로 돌아가서 뭔가를 변경해야하는 경우에 대비하십시오. 그러나 사용자가 C 형식을 사용하면 양식 A로 돌아가서 양식 C와 B를 닫아야합니다. WM6.5에서이 작업을 수행하려면 어떻게해야합니까? 이것은 Android와 iOS에서 Flag Clear Top과 Pop to Root를 통해 각각 수행 한 작업이지만, WM6.5에서이 작업을 수행하는 방법에 대해 혼란스러워합니다.닫기 나머지/다른 형태 (신고 클리어 탑/루트에 팝업)

답변

1

이것은 어렵지 않지만 설계 및 계획이 필요합니다.

public class FormC : Form { 

    public FormC() { 
    this.DialogResult = DialogResult.None; 
    } 

    private void Cancel_Clicked(object sender, EventArgs e) { 
    this.DialogResult = DialogResult.Cancel; 
    Close(); 
    } 

    private void OK_Clicked(object sender, EventArgs e) { 
    this.DialogResult = DialogResult.OK; 
    Close(); 
    } 

    public string CustomMessage { get; set; } 

} 

당신은 DialogResult 속성을 설정해야합니다하십시오 CustomMessage 문자열을 가지고 OK에 대한 버튼 클릭 몇 취소 지원 의 기본 버전 FormC보고에 의해

시작 FormC!

이제는 FormB으로주의를 돌리십시오. 위에서 조금 더 복잡하지만 여전히 기본적이고 이해할 수 있어야합니다. 그 폼이 닫힐 때 당신이 FormC_DialogResult 속성을 설정할 수 있도록 FormB에서

, 당신은 최대와이어 폼의 닫힌 이벤트 핸들러가 필요합니다. FormC_DialogResult 속성을 public으로 설정하면 형식 A이 값을 사용할 수 있습니다. FormCOK 버튼을 클릭하면, FormB이 같은 OK 대화 결과를 얻을 수 있으며, 너무 닫혀 있는지

public class FormB : Form { 

    private FormC formC; 

    public FormB() { 
    this.DialogResult = DialogResult.None; 
    } 

    private void Cancel_Clicked(object sender, EventArgs e) { 
    this.DialogResult = DialogResult.Cancel; 
    Close(); 
    } 

    private void OK_Clicked(object sender, EventArgs e) { 
    this.DialogResult = DialogResult.OK; 
    Close(); 
    } 

    public string CustomMessage { get; set; } 

    public void FormC_Show() { 
    FormC_DialogResult = DialogResult.None; 
    formC = new FormC(); 
    formC.Closed += new EventHandler(FormC_Closed); 
    formC.CustomMessage = "This is FormC. When it closes, " + 
     "it will call FormB's FormC_Closed event handler, " + 
     "which will set the FormC_DialogResult property."; 
    formC.Show(); 
    } 

    private void FormC_Closed(object sender, EventArgs e) { 
    FormC_DialogResult = formC.DialogResult; 
    if (FormC_DialogResult == DialogResult.OK) { 
     this.DialogResult = DialogResult.OK; 
     Close(); 
    } 
    } 

    public DialogResult FormC_DialogResult { get; set; } 

} 

알 수 있습니다.

이제 FormA에서 두 가지 양식을 모두 제어 할 수 있습니다.

public class FormA : Form { 

    private FormB formB; 

    public FormA() { 
    } 

    private void FormBShow_Clicked(object sender, EventArgs e) { 
    FormB_Show(); 
    } 

    private void FormB_Show() { 
    FormB_DialogResult = DialogResult.None; 
    formB = new FormB(); 
    formB.Closed += new EventHandler(FormB_Closed); 
    formB.CustomMessage = "This is FormB. When it closes, " + 
     "it will call FormA's FormB_Closed event handler, " + 
     "which will set the FormB_DialogResult property."; 
    formB.Show(); 
    } 

    void FormB_Closed(object sender, EventArgs e) { 
    FormB_DialogResult = formB.DialogResult; 
    if (FormB_DialogResult == DialogResult.OK) { 
     if (formB.FormC_DialogResult == DialogResult.OK) { 
     // Update Form C information 
     } 
     // Update Form B information 
    } 
    } 

    private DialogResult FormB_DialogResult { get; set; } 

} 

오, 그리고 대표단에 오신 것을 환영합니다!