2009-03-02 5 views
1

페이지 내에서 사용자 정의 컨트롤의 공용 메서드를 호출하려면 어떻게해야합니까?사용자 정의 컨트롤 내의 공개 메서드

페이지에서 OnInit 내에서 컨트롤을 동적으로로드합니다. 모든 아이디어? 어떤 이유로 그것이 공개 되어도 메소드가 존재하지 않는다는 빌드 오류가 발생합니다. 사용자 컨트롤이 모든 번거 로움의 가치가 있다고 생각하기 시작했습니다.

+0

@gnomixa : 어떻게 전화하고 있습니까? 그것은 어떤 유형의 대상입니까? 동적으로 생성하는 경우에는 내게 비명을 지르는 비명을 지르며,이 경우 메서드가 알려진 인터페이스 (기본 클래스 또는 인터페이스)에 있지 않은 경우 리플렉션을 통해 메서드를 호출해야합니다. – casperOne

답변

5

당신의 한을

Control fracTemplateCtrl = 
    (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx") 
fracTemplateCtrl.TestMethod(); 

당신이 fracTemplateCtrl is이하는 FracTemplateCtrl로 선언 그래서 비주얼 스튜디오 그것이 TestMethod()을 가지고 알고

FracTemplateCtrl fracTemplateCtrl = 
    (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx") 
fracTemplateCtrl.TestMethod(); 

주 말할 필요가있다. Control으로 선언되면 Visual Studio는이 가정을 할 수 없습니다.

+0

@gnomixa : 문제 없습니다. 질문이있는 코드를 게시하면 훨씬 더 빨리 답변을 얻을 수 있습니다! ;] –

1

사용자 정의 컨트롤을 올바른 형식으로 캐스팅하고 있습니까?

1

샘플 코드가 없으면 확실하게 말할 수는 없지만 UserControl에 대한 참조를 사용자 지정 컨트롤의 특정 형식으로 캐스팅해야 할 필요가 있다고 생각합니다. 당신의 UserControl 유형 "PersonControl"인 경우 예를 들어, 다음 코드는 다음과 같을 것이다 : 클래스는 UserControl에서 상속

PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx"); 
ctl.DoCustomMethod(); 
+0

캐스팅을 시도했지만 그 중 하나가 작동하지 않았습니다. 제어 fracTemplateCtrl = (FracTemplateCtrl) LoadControl ("FracTemplateCtrl.ascx"); Form.Controls.Add (fracTemplateCtrl); Response.Write (fracTemplateCtrl.TestMethod()); TestMethod를 찾을 수 없다는 오류가 발생했습니다. – sarsnake

+0

fracTemplateCtrl도 캐스팅 외에도 FracTemplateCtrl 유형이어야합니다. 이 주석의 코드는 Control 유형의 변수에서 TestMethod를 호출하려고합니다. –

0

경우, 다른 사람들이 가지고있는 것처럼, 당신이 그것을 액세스하는 경우 있는지 확인 당신이 정확하게 캐스팅하고 있다고 말했다. 예를 들어 :

양식에
public MyControl : UserControl 
{ 
    public void MyMethod(){...} 
} 

:

private MyControl mycontrol = new MyControl(); 
private void MainForm() 
{ 
    this.Controls.Add(mycontrol); 

    InitializeComponent(); 
} 

private void DoStuff() 
{ 
    ((MyControl)mycontrol).MyMethod(); 
} 
0
마이크의 대답이 완료,하지만 비주얼 스튜디오는 UserControl을 클래스의 검출에 대해 조금 남았습니다, 그리고 유형이하지 않는 것을 불평 할 수있는 방법입니다

있다. 이러한 상황에서는 web.config에서 참조 될 수 있지만 페이지에 <% @Reference %> 태그를 추가하여 강제로 인식해야합니다.

관련 문제