Toon posts:

[VB.NET] Byval + timer sub

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mischien een beetje vage omschrijving. Maar ik zit met het volgende probleem:

Ik maak ergens een timer aan:
Visual Basic:
1
2
3
4
5
    Private Sub gui_raam_openen(ByVal g As Graphics)
        Dim tRaam As New System.Timers.Timer(3000)
        AddHandler tRaam.Elapsed, AddressOf gui_raam_timer
        ....
End Sub


Dan staat ergens een sub voor wat te doen mocht die timer afgaan:
Visual Basic:
1
2
3
    Public Sub gui_raam_timer(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs, ByVal g As Graphics)
        gui_raam_open(g)
    End Sub


Nu wil ik dat graphics object (g) doorgeven van gui_raam_openen naar de timer fired sub... Zodat die het weer door kan geven aan de gui_raam_open sub.

Simpelweg AddressOf gui_raam_timer(g) werkt niet, dan wilt hij ook weten wat ik met sender en e doe omdat de "signatue" niet overeenkomt

Kan dit op de manier die ik in gedachten heb? Zoja; op welke manier kan ik dit realiseren?

Verwijderd

Ik dev al een jaar of 5niet meer in VB, maar ik weet zeker dat je een delegate moet gebruiken

http://www.google.nl/sear...pointer&btnG=Zoeken&meta=

  • peke
  • Registratie: Februari 2002
  • Laatst online: 19-05 15:21
Nee zo gaat het niet.

Je kan beter dit doen. :)

Visual Basic:
1
2
3
4
5
6
7
8
9
10
 Public Sub gui_raam_timer(ByVal sender As Object, ByVal e As ElapsedEventArgs) 
        gui_raam_open() 
 End Sub

Public Sub gui_raam_open()
        'Graphics Object maken voor (een) 'control'
        Dim g As Graphics = control.CreateGraphics()
        ' Tekenen met het graphics object
        g.Dispose()
End Sub


Als je vaak moet hertekenen kan je beter het Graphics object 1 keer aanmaken (tijdens de Form load bvb) en dan hergebruiken. :)

Control.CreateGraphics()

/e/

Via een delegate in code kan maar het is veel eenvoudiger om een timer op je form te plaatsen en dan dubbelklik en voila code invullen en je bent klaar. (De generated code bevat dan de delegate code).

[ Voor 13% gewijzigd door peke op 10-02-2007 21:42 ]


Verwijderd

Topicstarter
Dan moet ik voor alle 4 de ramen subs gaan maken, en aangezien er nog koplampen, heaters, airco, zijspiegels, knipperlichten en nog een hele hoop I/O bij komen kan ik beter een uniforme manier vinden. Of zie ik dat verkeerd?

  • peke
  • Registratie: Februari 2002
  • Laatst online: 19-05 15:21
Je kan ook een enumeration parameter meegeven.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Enum GUIACTION
     RAAMLINKS
     KOPLAMPEN
     '.....
End Enum

Public Sub gui_action(GUIACTION gui_action) 
        'Graphics Object maken voor (een) 'control' 
        Dim g As Graphics = control.CreateGraphics() 
        ' Tekenen met het graphics object 
        Select gui_action
            case: RAAMLINKS
                  'doe iets
        End Select
        g.Dispose() 
End Sub


De syntax kan fout zijn maar goed (gebruik enkel C# binnen .NET).

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Verwijderd schreef op zaterdag 10 februari 2007 @ 21:29:
Ik dev al een jaar of 5niet meer in VB, maar ik weet zeker dat je een delegate moet gebruiken

http://www.google.nl/sear...pointer&btnG=Zoeken&meta=
Die event-handler is een delegate. Alleen is de event zo beschreven dat de event-handler een bepaalde signature moet hebben. Vandaar dat je die method signature niet zomaar kunt wijzigen.
Verwijderd schreef op zaterdag 10 februari 2007 @ 21:52:
Dan moet ik voor alle 4 de ramen subs gaan maken, en aangezien er nog koplampen, heaters, airco, zijspiegels, knipperlichten en nog een hele hoop I/O bij komen kan ik beter een uniforme manier vinden. Of zie ik dat verkeerd?
Wat wil je eigenlijk precies doen ?

[ Voor 25% gewijzigd door whoami op 11-02-2007 10:08 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Tis n soort zelfbouw softwarematige scada/hmi/plc in één oplossing voor mn auto, leuk hobby project. De status van ramen bv is getekend in een overzicht van de auto. Als je op een raam duwd gaat het omlaag/omhoog en hetzelfde voor de rest van de actuatoren / sensoren in mn auto. Werkt via een 7" touch screen, carputer en USB I/O modules onder WinXP embedded.

Werkt allemaal prima tot nu toe maar die timer heb ik nodig omdat de ramen gestuurd zijn, en niet geregeld. Dat wil zeggen dat ik ze wel omlaag en omhoog kan sturen maar eigenlijk niet weet of ze al omlaag of omhoog zijn omdat er geen terugkoppeling is uit het proces. De timer zorgt ervoor dat een raam x aantal keer knipperd terwijl het omlaag of omhoog gestuurd wordt (voor de visualisatie) en de control disabled is zodat hij niet tijdens het omlaag sturen meteen weer omhoog gestuurd kan worden.

Ik ga me er vanavond control.graphics eens proberen, klinkt intressant.

  • stuiffer13
  • Registratie: September 2004
  • Laatst online: 17-04-2024
Zoek eens in de MSDN op ParameterizedThreadStart. Dit is volgens mij een delegate waar je een parameter aan mee kunt geven.
Pagina: 1