Metodi pubblici all'interno di User control c # .net
-
03-07-2019 - |
Domanda
Come si può invocare il metodo pubblico del controllo utente dall'interno della pagina?
Carico dinamicamente il controllo all'interno di OnInit sulla pagina. Qualche idea? Per qualche motivo sto ricevendo un errore di build che dice che il metodo non esiste, anche se è pubblico. Iniziare a pensare che i controlli utente non valgano tutta la seccatura.
Soluzione
Hai detto
Control fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
devi dire
FracTemplateCtrl fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
Nota che fracTemplateCtrl is
dichiarato come FracTemplateCtrl
, quindi Visual Studio sa che ha TestMethod()
. Quando viene dichiarato come Control
, Visual Studio non può fare questo presupposto.
Altri suggerimenti
Stai lanciando il controllo utente sul tipo corretto?
Senza codice di esempio è difficile dirlo con certezza, ma suppongo che tu debba trasmettere il tuo riferimento a UserControl al tipo specifico del tuo controllo personalizzato. Ad esempio, se UserControl è di tipo & Quot; PersonControl & Quot ;, allora il tuo codice sarebbe simile a questo:
PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
Se la tua classe eredita da UserControl, assicurati che quando accedi ad essa, come altri hanno già detto, la stai trasmettendo correttamente. Ad esempio:
public MyControl : UserControl
{
public void MyMethod(){...}
}
nella tua forma:
private MyControl mycontrol = new MyControl();
private void MainForm()
{
this.Controls.Add(mycontrol);
InitializeComponent();
}
private void DoStuff()
{
((MyControl)mycontrol).MyMethod();
}
La risposta di Mike è come viene fatto, ma Visual Studio può essere un po 'nervoso nel rilevare la classe UserControl e lamentarsi che il tipo non esiste. In quelle situazioni devo aggiungere un <% @Reference %>
tag alla pagina per forzarlo a riconoscerlo, anche se può essere referenziato nel web.config.