2014-05-21 1 views
0

C#의 다른 폼에서 비 상위 또는 비 -mdi 폼의 컨트롤에 액세스하거나 업데이트하려면 어떻게해야합니까?부모가 아닌 폼의 상태 표시 줄을 채우는 가장 좋은 방법은 무엇입니까

예, 양식이 - 1 양식 1이고 버튼이 있습니다. 버튼을 클릭하면 새 양식 - 양식 ** 2이 열립니다. 어린이 양식이 아닙니다. 시도하고 싶은 것은 ** Form2에 대한 몇 가지 활동을 수행 할 때입니다. 일부 정보는 상태 표시 줄 에 표시되어야합니다. Form1 .

샘플을 사용할 수 있다면 좋을 것입니다. 당신은 mediator pattern을 사용할 수 있습니다

+0

이 할 수있는 공용 속성/메소드를 추가; 대안 (하지만 나쁜 습관)은 해당 StatusBars를 공개로 설정하는 것입니다. –

답변

1

덕분에, 기본적으로는 같은 중재자 객체를 공유하는 두 양식을 만들어야합니다.

업데이트 샘플 코드

public class SimpleMediator{ 

    public Form1 MainForm {get; set;} 

    public void DisplayStatus(string message){ 
     MainForm.StatusBar.Text = message; 
    } 
} 

public class Form2 : Form{ 

    public SimpleMediator Mediator {get; set;} 

    //... 
} 

는 당신은 Form2를이

public void OpenSubForm(){ 
     var mediator = new Mediator{ 
      MainForm = this; 
     }; 
     var f2 = new Form2(){ 
      Mediator = mediator; 
     }; 
     f2.Show(); 
    } 

이제 Form2를

+0

비슷하게 사용할 수있는 예제 – manu

+0

업데이트 된 샘플보기. 도움이되기를 바랍니다. – aifarfa

1

편집이 Form2를 생성자와 새로운 Form1에의 참조 추가

 // Give Form1 in the constructor (this <- the Form1) 
     Form2 form2 = new Form2(this); 
     form2.Show(); 
:

public Form2(Form1 form1Para) 
    { 
     InitializeComponent(); 

     // This is the Form1 reference 
     Form1 form1 = form1Para; 
    } 

그런 다음 새 형식 2를 여는 방법을 Form1을, 편집을

2

다른 사람에게 cer를 알리려면 이벤트를 Form2에 설정할 수 있습니다 주석 박 조치가 실행됩니다 : Form1에이 형식 2를 만들 때

public partial class Form2 : Form 
{ 
    public class StatusChangedArgs : EventArgs 
    { 
     // Put useful information here which would be retrieved from Form1 
    } 

    public event EventHandler<StatusChangedArgs> StatusChanged; 

    private void OnStatusChanged() 
    { 
     var handler = StatusChanged; 
     if (handler != null) 
      handler(this, new StatusChangedArgs()); 
    } 

    // Call OnStatusChanged in other Form2's functions, e.g. button click ... 
} 

그런 다음, 당신은 형식 2의 이벤트에 대한 리스너로 Form1을 등록 할 수 있습니다

public partial class Form1 : Form 
{ 
    private void button1_Click(object sender, EventArgs e) 
    { 
     var form2 = new Form2(); 
     form2.StatusChanged += form2_StatusChanged; 
    } 

    void form2_StatusChanged(object sender, Form2.StatusChangedArgs e) 
    { 
     // Update Form1's status bar here 
    } 
}