2017-11-29 2 views
1

Windows 양식 응용 프로그램을 만들고 해당 기본 폼에 패널이 포함되어 있습니다. 다른 사용자 컨트롤이 버튼 클릭시 해당 패널에로드됩니다. 클릭 설정 버튼 그것이 패널에 대시 보드 사용자가 컨트롤러를로드 할 때다른 클래스에서 클래스 메서드를 호출하는 방법

namespace LearnCSharp 
{ 
    public partial class MainForm : Form 
    { 
     private void configButton_Click(object sender, EventArgs e) 
     { 

      var uControllerDashboard = new Controllers.Dashboard();  
      panel.Controls.Add(uControllerDashboard); 
      updateNotification("active");   

     } 

     private void updateNotification(string state) 
     { 
      switch (state) 
      { 
       case "active" : 
       //Do something here 
       break; 

      } 
     } 

    } 
} 

는 다른 대시 보드 UserControl을에서 버튼을 적용있다. 해당 버튼을 클릭하면 updatNotification 메서드가 MainForm 클래스에 있습니다.

namespace LearnCSharp.Controllers 
{ 
    public partial class Dashboard : UserControl 
    { 
     private void btnApply_Click(object sender, EventArgs e) 
     { 
      // Need to call updateNotification method here. 
     } 
    } 
} 

어떻게해야합니까? 어떤 도움을 주셔서 감사합니다. 감사.

+3

먼저 메소드를 public으로 표시하고 MainForm의 인스턴스를 생성 한 다음 MainForm.updateNotification()을 – apomene

+0

@apomene +1으로 호출해야합니다. 'MainForm.updateNotification'을'instance.updateNotification'과 같이 변경 할 수 있습니까? 왜냐하면 지금은 정적 호출과 매우 흡사하기 때문입니다. –

+0

@ apomene의 답변은 기술적으로 가능하지만 극한 상황을 제외하고는 사용해서는 안됩니다. 대신 컨트롤이 관련 인스턴스를 알지 못하기 때문에 아래 이벤트 응답을 사용하십시오. – netniV

답변

2

이벤트를 사용하십시오.

UserControl 내에서 MainForm을 호출하는 대신 UserControl에서 이벤트를 만들고 MainForm에 해당 이벤트를 구독하게하십시오. UserControl 내부에서 이벤트를 트리거하면됩니다.

웹에 대한 많은 사례가 있습니다. 그냥 이것 좀보세요 :이 도움이

희망을.