Pergunta

Como pode invocar o método público do controle do usuário na página?

Eu carrego o controle dinamicamente dentro do Oninit na página. Qualquer idéias? Por alguma razão, estou recebendo um erro de construção que diz que o método não existe, mesmo que seja público. Começando a pensar que os controles do usuário não valem todo o aborrecimento.

Foi útil?

Solução

Você disse

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

você precisa dizer

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

Observe que fracTemplateCtrl is declarado como um FracTemplateCtrl, então o Visual Studio sabe que tem um TestMethod(). Quando é declarado como um Control, Visual Studio não pode fazer essa suposição.

Outras dicas

Você está lançando o controle do usuário para o tipo correto?

Sem código de amostra, é difícil dizer com certeza, mas acho que você precisa lançar sua referência ao UserControl ao tipo específico do seu controle personalizado. Por exemplo, se o seu UserControl for do tipo "PersonControl", seu código ficaria assim:

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

Se sua aula estiver herdando do UserControl, certifique -se de que, quando estiver acessando, como outros disseram, você está lançando corretamente. Por exemplo:

public MyControl : UserControl
{
    public void MyMethod(){...}
}

na sua forma:

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

    InitializeComponent();
}

private void DoStuff()
{
    ((MyControl)mycontrol).MyMethod();
}

A resposta de Mike é como é feito, mas o Visual Studio pode ser um pouco instável em detectar a classe UserControl e reclamar que o tipo não existe. Nessas situações, tenho que adicionar um <% @Reference %> Tag na página para forçá -la a reconhecer, mesmo que possa ser referenciada no web.config.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top