Toon posts:

[VB6] Form component events afvangen binnenin een object

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag Tweakers,
ik ben een VB6 applicatie aan het (her)schrijven die Outlook synchroniseert met Webcalendar (via HTTP en PHP serverside). Nu had ik de volgende vraag over VB6: Kan ik vanuit een class events afvangen die uit een form component komen? Ik zou wat behaviour aan een listview van afspraken willen hangen (bvb dubbelklik opent ofwel de appointment in Outlook of een eigen venster als het een Webcalendar appointment is, afhankelijk van type object). Nu zal ik deze lijst op verschillende plaatsen gebruiken in de applicatie, en zou ik de code willen localiseren.
In java zou ik class ListView hiervoor extenden en event handlers in het object zelf steken, maar het lijkt me dat dit niet kan in VB6 (correct me if i'm wrong). Wat ik nu dus zou willen doen is een AppointmentList class schrijven met wat interne functies en een WithEvents variabele LV (voor listview). Dan zou ik in mijn diverse forms een listview en een AppointmentList creëeren, en die listview in het AppointmentList stopppen. Ik zou dan willen dat de AppointmentList de events van de listview opvangt. Ik heb dit nu als volgt gedaan maar de event handlers worden niet uitgevoerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'In formulier:

ListView1.View = lvwReport

Dim aplist As AppointmentList
Set aplist = New AppointmentList
Call aplist.setListView(ListView1)

'In AppointmentList:

Private WithEvents LV As listview

Function setListView(ByRef listview As listview)
    Set LV = listview
End Function

Private Sub LV_Click()
    MsgBox ("row was clicked")
End Sub


Weet iemand hoe ik dit zou moeten aanpassen? Veel dank op voorhand!

  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 09:43

Twee Dee

Morgen weer een ondertitel.

Controls geven hun events (helaas) altijd aan hun form, je kunt ze (naar mijn weten) niet "redirecten" naar een andere class.

Maar kan je het niet ietsje makkelijker doen door de event van de ListView een call te laten plegen naar je object?

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


  • Kuhlie
  • Registratie: December 2002
  • Niet online
In Form1 (naast een Listview met de naam ListView1):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit

Dim c As Class1

Private Sub Form_Load()
ListView1.View = lvwReport
Set c = New Class1
c.setListView ListView1
End Sub

Private Sub ListView1_Click()
MsgBox "HOI!"
End Sub


In Class1:
code:
1
2
3
4
5
6
7
8
9
10
11
Option Explicit

Public WithEvents lv As listview

Private Sub lv_Click()
MsgBox "HOI VANUIT DE CLASS"
End Sub

Public Function setListView(ByRef listview As listview)
    Set lv = listview
End Function


Werkt prima, ik krijg eerst 'HOI!' en direct daarna 'HOI VANUIT DE CLASS'. Je hebt dus ergens een bugje geschreven ;)

[ Voor 13% gewijzigd door Kuhlie op 29-08-2004 15:42 . Reden: "ListView1.View = lvwReport" toegevoegd om de vergelijking te verbeteren ]


  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Ik weet niet of het in jouw geval werkt maar als je extra functionaliteit aan controls in VB wilt hangen doe je dat normaal gesproken via een Usercontrol.

In die usercontrol zet je dan de listbox en de events van die listbox moet je dan doorlussen via je usercontrol.
Voor zover ik weet kan dit trouwens niet automatisch, elk event van je listbox dat je wil doorlussen moet je ook expliciet in je usercontrol afhandelen en doorgeven.

En die usercontrol kan je dan gewoon als normaal control gebruiken en op de diverse schermen zetten.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Naar mijn idee is het opvangen van events van UI elementen in een buisiness object ( wat zon class iha is ) niet verstandig.

In dat geval zou je er idd beter een usercontrol van kunnen maken.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.