[.Net C#] Usercontrols - Custom properties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een hobby projectje en ik probeer iets te bereiken waar ik sowiso niet zeker van ben of het wel mogelijk is.

Situatie is als volgt, ik heb 2 usercontrols: Lichtknop en VelbusConnector
Lichtknop is niet meer dan een knop met 2 states (Aan, Uit), en een custom property myVelbusConnector van het type VelbusConnector
VelbusConnector is een socketclient met oa. het event PacketReceived.

Wat al werkt is dat ik 1 VelbusConnector gebruik en verschillende Lichtknoppen met dezelfde VelbusConnector als property. Op deze manier worden de commando's van alle knoppen verzonden via dezelfde connector. Ik gebruik nu een subscription op mijn MainForm, maar dit is slordig en niet echt herbruikbaar.

Wat nog niet werkt is om in de Usercontrol Lichtknop te subscriben op het PacketReceived event van de VelbusConnector. Als ik dit probeer krijg ik een Null Ref Exception op myVelbusConnector bij het subscriben van het event.

C#:
1
2
3
4
5
6
        public Lichtknop()
        {
            InitializeComponent();
            this.myVelbusConnector.PacketReceived += new VelbusConnector.PacketReceivedHandler(myVelbusConnector_PacketReceived);

        }


Ik doe duidelijk iets verkeerd of probeer iets dat niet mogelijk is. Kan er iemand uitsluitsel geven, heb me al suf gegoogled maar niets concreets gevonden.
Events en Usercontrols zijn nog relatief nieuw voor me...

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Je probeert een event de koppelen aan 'myVelbusConnector' in de constructor van de Lichtknop control. Dat gaat natuurlijk nooit werken want tijdens de constructor is de myVelbusConnector property nog niet gezet. Dat gebeurt pas zodra jij zelf een VelbusConnector aan die property assigned (via de designer bijvoorbeeld).

Wat je kunt doen is de setter van de myVelbusConnector property gebruiken. Zodra een nieuwe VelbusConnector geset wordt verwijder je de oude event handler (indien van toepassing) en voeg je de nieuwe toe. Zoiets:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private VelbusConnector _myVelbusConnector
public VelbusConnector myVelbusConnector
{
    get { return _myVelbusConnector; }
    set
    {
        // als er al een velbusconnector is verwijder dan de event handler
        if (_myVelbusConnector != null)
            _myVelbusConnector.PacketReceived -= myVelbusConnector_PacketReceived;
        
        // zet de nieuwe velbusconnector
        _myVelbusConnector = value;

        // als die niet null is voeg dan de event handler toe
        if (_myVelbusConnector != null)
            _myVelbusConnector.PacketReceived += myVelbusConnector_PacketReceived;
    }
}

[ Voor 8% gewijzigd door NickThissen op 27-07-2011 14:47 ]

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nick, Dat is de oplossing! Verschrikkelijk bedankt, ik wist dat ik iets doms was aan het doen!

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Niet om na te schoppen, helemaal niet, maar met basic debuggen was je daar ook zelf uitgekomen. Misschien moet je je even verdiepen in de vele, super uitgebreide, mogelijkheden die VS biedt om te debuggen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 04:26

GrimaceODespair

eens een tettenman, altijd ...

RobIII schreef op woensdag 27 juli 2011 @ 15:31:
Niet om na te schoppen, helemaal niet, maar met basic debuggen was je daar ook zelf uitgekomen. Misschien moet je je even verdiepen in de vele, super uitgebreide, mogelijkheden die VS biedt om te debuggen.
offtopic:
Niet om het topic te vervuilen, echt waar niet :> maar met een debugger had hij wellicht alleen gevonden dat die property null was.

Mijn ervaring is dat heel die page lifecycle van ASP.NET iets is dat door weinigen écht doorgrond wordt (leve MVC), en degenen die het doorgronden doen dat ook alleen maar omdat ze eerst 100 keer met hun hoofd tegen de muur zijn gelopen.

Het is inderdaad een redelijk basic vraag, maar met de zwarte doos die ASP.NET soms is, vergeef ik hem (8>

Wij onderbreken deze thread voor reclame:
http://kalders.be


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
hoe kom je er bij dat het ASP.NET is, hij heeft het over een MainForm

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 04:26

GrimaceODespair

eens een tettenman, altijd ...

roy-t schreef op donderdag 28 juli 2011 @ 17:36:
hoe kom je er bij dat het ASP.NET is, hij heeft het over een MainForm
Omdat ik niet kan lezen :X

Wij onderbreken deze thread voor reclame:
http://kalders.be


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op woensdag 27 juli 2011 @ 15:31:
Niet om na te schoppen, helemaal niet, maar met basic debuggen was je daar ook zelf uitgekomen. Misschien moet je je even verdiepen in de vele, super uitgebreide, mogelijkheden die VS biedt om te debuggen.
Ik was idd iets heel doms aan het doen, mea culpa.

Het is inderdaad een Forms application en had inderdaad gevonden dat de property null was ;-) maar was te dom om te beseffen dat hij pas werd geSET in de SET... 8)7

In ieder geval nogmaals bedankt voor de oplossing!
Pagina: 1