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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top