[C#|WinForms] User controls in parent container

Pagina: 1
Acties:

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 26-05 09:47
Zo...tijd voor een topic

Ik heb een winforms app, waarin ik een frmMain heb, en een zooi usercontrols.

in de frmMain heb ik een functie om makkelijk een usercontrol te laden:
C#:
1
2
3
4
5
6
7
8
9
public void ShowControl(Control c)
{   
    if(pnlMain.Controls.Count != 0)
        pnlMain.Controls[0].Dispose();
    pnlMain.Controls.Clear();
    pnlMain.Controls.Add(c);
    pnlMain.Controls[0].Dock = DockStyle.Fill;
    ChangePanelState();         
}


Alle usercontrols zijn afgeleid van een klasse ITemplate (Visual Inheritence)
in de klasse ITemplate, heb ik de functies:

C#:
1
2
3
4
public void LoadStartControl(BLL.ApplicationParams ap)
{
    ((frmMain)this.ParentForm).ShowControl(new ucStart(ap));            
}


Hier krijg ik echter een System.NullReferenceException : Object reference not set to an instance of an object.

ParentForm van UserControl is read only, en Parent van Control kan wel geset worden, maar dan worden de controls niet meer geladen.

Wat is de beste manier, om usercontrols te laden in de parent container vanuit andere usercontrols (dus de usercontrol vervagen door een andere)?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Je kan een mediator gebruiken, waarbij de parent optreedt als mediator. Vervolgens geef je iedere child control bij het aanmaken een reference in de constructor mee naar de parent.

Bij een actie (bijvoorbeeld wijzigen van zichtbaar / onzichtbaar) roep je via de reference de juiste functie in de parent aan.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 26-05 09:47
gorgi_19> Dus de makkelijkste oplossing is, is om gewoon de pnlMain mee te geven in de constructor van de winform?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

PhoneTech schreef op 16 april 2004 @ 12:29:
gorgi_19> Dus de makkelijkste oplossing is, is om gewoon de pnlMain mee te geven in de constructor van de winform?
Als winform in dit geval de control is: ja :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
PhoneTech schreef op 16 april 2004 @ 12:29:
gorgi_19> Dus de makkelijkste oplossing is, is om gewoon de pnlMain mee te geven in de constructor van de winform?
Ik zou het ook zo doen, en dat is eigenlijk ook het logischte vind ik.
In Delphi gebeurt het eigenlijk ook zo; bij het maken van een nieuwe form, geef je in de constructor aan welke form de parent is van die form.

https://fgheysels.github.io/


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 26-05 09:47
Is het misschien beter, om een event te maken, met een delegate, en als event waarde een nieuwe control mee te geven? Zou dit geheugen ruimte schelen?

Want nu zit ik in alle constrols de parent container mee te geven, en daar wordt ie niet echt sneller van! (merkbaar zelfs)

En, nu ik toch bezig ben...Wat zijn goede technieken, om de draw snelheid te versnellen en het geheugen gebruik beter binnen de perken te houden?
Pagina: 1