[vb.net] event problemen

Pagina: 1
Acties:

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
beste mensen,

ik ben bezig met een usercontrol te maken. Wil prima, alleen ik heb een probleem. (vandaar dat ik hier post)

situatie is als volgt:
ik heb een usercontrol, waarop ik een ander usercontrol zet (aan de controlarray toevoeg dus)

nu wil ik het MouseDown event van de complete usercontrol op kunnen vangen in mijn form1 (de form waarop ik mijn usercontrol test)

echter, ik wil ook in de usercontrol zelf het MouseDown event afvangen om er iets mee te doen..
verder heb ik dus op mijn usercontrol (laten we hem usercontrol1 noemen) nog een ander usercontrol (usercontrol2).
De MouseDown van usercontrol1 gaat alleen af wanneer ik naast mijn usercontrol2 klik (die dus aan usercontrol1 is toegevoegd)


wat ik wil:
soort van event bubbeling zoals dat in bijv. JS zit.
als ik de MouseDown in usercontrol2 opvang, dan moet ie ook afgaan in usercontrol1, en daarna eigenlijk ook nog in form1..

iemand een idee?

This message was sent on 100% recyclable electrons.


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 27-11 15:14

ZaZ

Tweakers abonnee

Weet niet of het kan in vb.net, maar kan je niet iets met RaiseEvent?

Lekker op de bank


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
ZaZ schreef op zaterdag 25 november 2006 @ 13:56:
Weet niet of het kan in vb.net, maar kan je niet iets met RaiseEvent?
ja en nee..
dwz, je kan bijv. als je op (in mijn geval) usercontrol2 klikt een (mousedown event opvangt) een ander event weer raisen, echter.. je kan niet een MouseDown raisen op de parent van je controll

bij:
Visual Basic .NET:
1
2
3
4
    Private Sub me_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown
        'do own shizzle here
        RaiseEvent MouseDown(sender, e)
    End Sub

krijg je een blauw ding onder 'MouseDown' met de melding:
Derrived classes can not raise base events.



trouwens is het ook zo dat als ik in mijn usercontrol2 class (die eigenlijk overerft van een label) geen MouseDown event opvang, hij toch niet doorgegeven wordt aan de parent (usercontrol1) hij 'stopt' gewoon

[ Voor 13% gewijzigd door BasieP op 25-11-2006 14:09 ]

This message was sent on 100% recyclable electrons.


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11 13:15

Korben

() => {};

Windows Forms is niet gebouwd op event bubbling. Je kunt die 'base events' overigens vaak toch raisen door een protected method uit een base class (in het geval van MouseDown is dat OnMouseDown) aan te roepen.

Ik heb even geen zin om het te controleren, maar als het goed is kun je, aangezien je user control afgeleid is van Control, Control een OnMouseDown bevat, en je form ook is afgeleid van Control, een Parent.OnMouseDown doen in beide user controls.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • FireWood
  • Registratie: Augustus 2003
  • Laatst online: 01-12 22:19
Kun je niet beter een class aanmaken die event opvangt en daarna de andere classes die de volgende event weer oppakt ook aanroept?

code:
1
2
3
4
5
6
7
event2>class2>class2activate
       class2>class1

event1>class1>class1activate
       class1>class0activate

event1>class0activate


Hou je het iets overzichtelijker en begrijperlijker.

[ Voor 5% gewijzigd door FireWood op 26-11-2006 12:16 ]

Noobs don't use "F1", Pro's do, but they can't find the information they needed


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

BasieP is er dus bijna:

Visual Basic .NET:
1
2
3
4
Private Sub me_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseDown
     'do own shizzle here
    Base.OnMouseDown(sender, e) 
End Sub

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
heren,

heel erg bedankt, het idee van h.edink vind ik wel leuk, maar wel een berg meer werk voor 1 usercontrol

het idee van physicsRules ziet er heel goed uit, alleen 'base' is niet declared ;)

ik heb nu korben's manier geimplementeerd, en dit werkt uitstekent :)


echter, nu wil ik dat wanneer ik een mousedown krijg ik mijn form repaint
me.update werkt helaas niet... hij tekent niks..

Visual Basic .NET:
1
2
3
4
5
6
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
  MyBase.OnMouseDown(e)
  'do own shizzle here

  'en hier wil ik dus de repaint aanroepen
  End Sub


zijn er nog manieren om dit te doen?

This message was sent on 100% recyclable electrons.


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

BasieP schreef op zondag 26 november 2006 @ 17:22:
heren,

heel erg bedankt, het idee van h.edink vind ik wel leuk, maar wel een berg meer werk voor 1 usercontrol

het idee van physicsRules ziet er heel goed uit, alleen 'base' is niet declared ;)
C# Rules >:)
ik heb nu korben's manier geimplementeerd, en dit werkt uitstekent :)


echter, nu wil ik dat wanneer ik een mousedown krijg ik mijn form repaint
me.update werkt helaas niet... hij tekent niks..
[..]
zijn er nog manieren om dit te doen?
De truc hier is
Visual Basic .NET:
1
Me.Invalidate

Of iets dergelijks.
Invalidate zorgt ervoor dat de juiste events gevuurd worden om het form te repainten.
Pagina: 1