2014-12-04 7 views
0

여러 자식 폼이 있지만 그 중 하나의 공통 메서드가 get_CurrentClamp()입니다. MDI 부모로부터 현재 활성화 된 mdichild 메서드를 호출하고 싶습니다.mdi parent에서 자식 폼 메서드를 호출하는 방법 C#

이것은 MDIparent 형태의 메뉴 항목의 onclick 이벤트 인 메소드를 호출한다 MDIMain.cs.

자식 폼에서
.... 
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
    if (MdiChildren.Any()) 
      { 
       Form f = this.ActiveMdiChild;    
       f.get_CurrentClamp(varCurrentThreshhold); 
      } 
    } 
..... 

에게 frmDashboard.cs

public void get_CurrentClamp(float curThreshhold=5.5) 
     { 
      ... 
     } 

하지만 난이 오류가 계속은 언제 어디 잘못 갈거야? 어떤 도움이라도 대단히 감사하겠습니다!

오류는 점점이

오류 3 'System.Windows.Forms.Form이' 'get_CurrentClamp'에 대한 정의와의 첫 번째 인수를 받아들이는없는 확장 메서드 'get_CurrentClamp' 를 포함하지 않는 것입니다 유형 'System.Windows.Forms.Form이' 볼 수 있습니다 (당신은 using 지시문 또는 어셈블리 참조가?)

를 오류가 mdiparent 양식을 얻고있다 이잖아. 활성 형태가 frmDashboard 인스턴스 중 하나가 될 것 확신 경우

+1

무엇이 오류입니까? –

+0

get_CurrentClamp를 찾을 수 없습니까? –

+5

표준 형식 유형으로 캐스팅하고 있습니다. 물론 get_CurrentClamp()라는 메서드가 없습니다. Reflection을 사용하여 메서드를 가져 와서 호출 할 수 있습니다. 더 나은 해결책은 모든 자녀 양식이 해당 방법을 포함하는 ** 인터페이스 **를 구현하도록하는 것입니다. 인터페이스로 캐스팅하고 메소드를 호출 할 수 있습니다. –

답변

0

덕분에 Idle_Mind 덕분에 인터페이스를 사용하여 문제를 해결했습니다. 내가 IChildMethods.cs 아래와라는 파일에 새로운 인터페이스를 만든 인터페이스를하다

internal interface IChildMethods 
    { 
     void get_CurrentClamp(float curThreshhold=5.5); 
    } 

와 자식 폼에 난 그냥 형태 frmDashboard.cs에 다음과 같은 인터페이스를 포함

; 반사가 인터페이스를 사용하는 것보다 더 나은 경우
public partial class frmDashboard : Form, IChildMethods 

내가 인터페이스 방법 일부터 반영 방법을 사용하여 시도 havent 한

.... 
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
    if (MdiChildren.Any()) 
      { 
       if (this.ActiveMdiChild is IChildMethods) 
      { 
       ((IChildMethods)this.ActiveMdiChild).get_CurrentClamp(varCurrentThreshhold); 
      }    

      } 
    } 
..... 

mdiform의 MDIMain.cs에 있지만,

그냥 궁금하고 이러한 문제에서

0

, 그 유형으로 F를 선언 할 수

frmDashboard f = this.ActiveMdiChild; 

당신은 단지의 경우이 주위에 시도/캐치 할 수 있습니다. (어쨌든 VB에서 작동합니다 .C#에 대해 잘 모름)