문제

페이지 내에서 사용자 제어의 공개 메소드를 어떻게 호출 할 수 있습니까?

페이지의 oninit 내부에 컨트롤을 동적으로로드합니다. 어떤 이유로 든 메소드가 공개적이지만 메소드가 존재하지 않는다는 빌드 오류가 발생합니다. 사용자 컨트롤이 모든 번거 로움이 아니라고 생각하기 시작합니다.

도움이 되었습니까?

해결책

당신은 말했습니다

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

당신은 말해야합니다

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

주목하십시오 fracTemplateCtrl is a로 선언되었습니다 FracTemplateCtrl, 따라서 Visual Studio는 그것이 있다는 것을 알고 있습니다 TestMethod(). 그것이 선언 될 때 Control, Visual Studio는이 가정을 만들 수 없습니다.

다른 팁

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

샘플 코드가 없으면 확실하게 말하기는 어렵지만 USERControl에 대한 언급을 특정 유형의 사용자 정의 컨트롤에 시전해야한다고 생각합니다. 예를 들어, USERCONTROL이 "PersonControl"유형 인 경우 코드가 다음과 같이 보입니다.

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

수업이 UserControl에서 상속되는 경우, 다른 사람들이 말했듯이 액세스 할 때 올바르게 캐스팅하고 있는지 확인하십시오. 예를 들어:

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();
}

Mike의 대답은 그것이 어떻게 수행되었는지이지만 Visual Studio는 Usercontrol 클래스를 감지하는 데 약간 원조 될 수 있으며 유형이 존재하지 않는다고 불평합니다. 그러한 상황에서 나는 a를 추가해야한다 <% @Reference %> Web.config에서 참조 될 수 있지만 페이지의 태그를 인식하도록 강요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top