Métodos públicos no controle do usuário C# .NET
-
03-07-2019 - |
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.
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.