[C#] Een control van het ParentForm opvragen

Pagina: 1
Acties:

  • labee
  • Registratie: November 2002
  • Laatst online: 10-09-2022
Hoi,

Ik gebruik een usercontrol in mijn applicatie.
Ik wil een Control van het parent form aanspreken vanaf dit usercontrol.

Dit werkt wel.
button1.Text = this.ParentForm.Name;

Maar dit werkt weer niet:
frmMain parentForm = (frmMain)this.ParentForm;
button1.Text = parentForm.MyControl.Text;

Iemand een idee hoe ik dit kan doen..??..

Thx.

http://www.labee.nl


  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 13:31

Rhapsody

In Metal We Trust

parentForm.controls( ) als het goed is wel?

🇪🇺 pro Europa!


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Is dat niet bad practise, om een aanname te doen dat het ParentForm *altijd* frmMain is? Misschien moet je de waarde van je control op een generiekere manier exposen naar child forms...

日本!🎌


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

IMHO is het netter om gewoon een event op het usercontrol maken en het parent zelf dat event laten afhandelen.
Wel opletten met InvokeRequired om cross-thread calls te doen op die forms.

Nu met Land Rover Series 3 en Defender 90


  • labee
  • Registratie: November 2002
  • Laatst online: 10-09-2022
Rhapsody schreef op zondag 19 februari 2006 @ 15:38:
parentForm.controls( ) als het goed is wel?
Ik krijg dan de volgende foutmelding.
'System.Windows.Forms.Control.Controls' is a 'property' but is used like a 'method'

http://www.labee.nl


  • labee
  • Registratie: November 2002
  • Laatst online: 10-09-2022
_Thanatos_ schreef op zondag 19 februari 2006 @ 16:10:
Is dat niet bad practise, om een aanname te doen dat het ParentForm *altijd* frmMain is? Misschien moet je de waarde van je control op een generiekere manier exposen naar child forms...
Oke maar hoe doe ik dat?

http://www.labee.nl


  • labee
  • Registratie: November 2002
  • Laatst online: 10-09-2022
MTWZZ schreef op zondag 19 februari 2006 @ 16:13:
IMHO is het netter om gewoon een event op het usercontrol maken en het parent zelf dat event laten afhandelen.
Wel opletten met InvokeRequired om cross-thread calls te doen op die forms.
Het gaat niet zo zeer om het event maar om een waarde van het de parent te gebruiken op de child user control.

http://www.labee.nl


Verwijderd

labee schreef op zondag 19 februari 2006 @ 17:59:
[...]


Het gaat niet zo zeer om het event maar om een waarde van het de parent te gebruiken op de child user control.
Is het dan niet netter om de benodigde waarde mee te sturen met het event wat de user control op dat moment aan het verwerken is? En als die waarde bijvoorbeeld elke 10 milliseconden nodig is gebruik je een timer op het parent form om elke 10 milliseconden een event te raisen voor de user control waarin je de desbetreffende waarde meegeeft ofzo Op die manier hoeft de user control geen weet te hebben van de "manier" waarop deze is geimplementeerd.

[ Voor 33% gewijzigd door Verwijderd op 19-02-2006 18:06 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10-04 23:02
labee schreef op zondag 19 februari 2006 @ 17:55:
[...]


Ik krijg dan de volgende foutmelding.
'System.Windows.Forms.Control.Controls' is a 'property' but is used like a 'method'
Dat komt omdat Controls een property is , en geen method. Een beetje zelf de evt. foutmelding begrijpend lezen mag wel, of evt eens zelf in de msdn kijken kan ook geen kwaad.
Verwacht niet dat er hier altijd 100% correcte, voorgekauwde code gepost wordt.

Zowiezo vind ik het niet netjes om een afhankelijk in je user-control te gaan inbouwen. De optie van een event is hier al geopperd, en, afhankelijk van wat je precies wilt doen, lijkt die optie me ook wel een goede oplossing.
Dwz, zorg ervoor dat je user-control een event heeft die getriggered wordt op het juiste moment. De parent control (dwz de control/form waar jouw usercontrol op staat) kan zich dan 'subscriben' op die event, en ervoor zorgen dat de juiste actie ondernomen wordt als die event getriggered wordt.

Bv:
code:
1
2
3
4
5
6
7
myUserControl.SomeActionOccured += new EventHandler (OnMyUserControlActionOccured);

...
private void OnMyUserControlActionOccured( object sender, EventArgs e )
{
    label.Text = "bliep";
}


Voor meer informatie kan je eens even in de MSDN kijken, en zoeken op Delegates, events, eventhandler.

[ Voor 40% gewijzigd door whoami op 19-02-2006 18:34 ]

https://fgheysels.github.io/

Pagina: 1