Inserire una form in una tab page (in C#)

di il
8 risposte

Inserire una form in una tab page (in C#)

Salve, vi spiego brevemente il problema. Ho un form suddiviso in tab page (si tratta di quelle schede che appartengono al controllo tabControl). Ora devo inserire in una di queste tab page, una "form" indipendente. Cioè, il contenuto di questa tab page devo prelevarla da una dll. Come strutturo questa dll e come la importo nella tab page?

8 Risposte

  • Re: Inserire una form in una tab page (in C#)

    Ciao Toty_

    Non sono sicuro di aver capito bene il problema, comunque ti butto li qualcosa.
    La dll potrebbe contenere un tuo controllo, diciamo un panel con dentro tutto il resto, e poi inserisci il controllo nella tab page.
  • Re: Inserire una form in una tab page (in C#)

    barba59 ha scritto:


    Ciao Toty_

    Non sono sicuro di aver capito bene il problema, comunque ti butto li qualcosa.
    La dll potrebbe contenere un tuo controllo, diciamo un panel con dentro tutto il resto, e poi inserisci il controllo nella tab page.
    C'è un altro problema. Con il panel funziona (grazie!), ora però devo fare in modo che il programma non abortisca senza una delle dll. Cioè, se ho 3 schede (per ognuna importo una dll diversa) ma, per esempio, la dll della seconda scheda è mancante, il programma deve solo avvisare che non c'è ma non deve abortire. Il problema è che per importare la dll devo per forza usare lo using....quindi se la dll manca, abortisce. Come faccio?
  • Re: Inserire una form in una tab page (in C#)

    Ciao Toty_

    Non devi per forza usare lo using, puoi caricare la dll a runtime dopo aver controllato se il file esiste.
    Per caricarla vi sono diversi sistemi, puoi ad esempio usare la classe 'Assembly':
    
    string dllFileName = ...
    Assembly assembly = Assembly.LoadFrom(dllFileName);
    

    Poi puoi ricorrere ai metodi della classe Assembly per accedere alle classi contenute nella dll, di solito si parte da Assembly.GetType(), ma questo dipende da cosa devi fare.
  • Re: Inserire una form in una tab page (in C#)

    Perfetto, grazie!
  • Re: Inserire una form in una tab page (in C#)

    Non ho capito, se non faccio lo using come faccio ad usare i tipi nella dll?
  • Re: Inserire una form in una tab page (in C#)

    Si certo, i tipi che usi devono essere noti, ad esempio se usi questo sistema per fare dei plug-in dovrai conoscere la loro classe base per poi istanziare gli oggetti nella dll.
  • Re: Inserire una form in una tab page (in C#)

    Ho caricato l'assembly come mi hai detto tu (con il LoadFrom). Però adesso non so come fare per prelevare un oggetto statico (e pubblico) da lì. Nell'assembly ho un namespace, all'interno c'è la classe Program.cs e al suo interno c'è un oggetto statico che devo prelevare. Il tipo di questo oggetto statico è derivato dalla classe Panel (che ho chiamato "Main"). Ecco come è strutturato l'assembly:
    
    namespace n1
    {
       public class Program
       {
          public static Main oggetto_statico;
          //ecc....
       }
    }
    
    Ora io prelevo questo assembly con il LoadFrom ma come faccio ad accedere a n1.Program.oggetto_statico?
    Una volta ottenuto l'oggetto, dovrò anche istanziarlo (quindi oggetto_statico = new Main(); ) e invocare un suo metodo. Come si fa?
    Con l'using sarebbe semplice ma non posso perchè non è detto che la dll sia sempre presente nel progetto (e se non c'è, la using farebbe lanciare un'eccezione), quindi devo per forza usare il LoadFrom della classe Assembly.
  • Re: Inserire una form in una tab page (in C#)

    Ho creato una libreria C# chiamata 'LibCSharp' contenenete un componente derivato da Panel che ho chiamato 'MyPanel'.
    In un altro progetto posso scrivere:
    
    private void button1_Click(object sender, EventArgs e)
    {
        Assembly assembly = Assembly.LoadFrom("LibCSharp.dll");
        Type myPanelType = assembly.GetType("LibCSharp.MyPanel");
        Panel myPanel = (Panel)Activator.CreateInstance(myPanelType);
    }
    
    Notare che l' oggetto che istanzio è di tipo MyPanel ma lo assegno ad una variabile di tipo Panel (non potrebbe essere altrimenti) a questo punto lo puoi inserire nel tuo tabControl.
Devi accedere o registrarti per scrivere nel forum
8 risposte