Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0655: WithEvents auch bei später Bindung (Late Binding) nutzen

 von 

Beschreibung 

Dieses Beispiel demonstriert die Verwendung des VBControlExtender-Objektes. Mit dem VBControlExtender ist es möglich ein beliebiges Steuerelement zur Laufzeit "WithEvents" zu laden, und das ohne einen Verweis auf das Steuerelement zu setzen oder es in der Komponetenliste einzubinden. Also LateBinding WithEvents ...

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,48 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

Private WithEvents lvwTest As VBControlExtender

Private Sub Form_Load()
    Licenses.Add "MSComctlLib.ListViewCtrl.2" ' strLicenseKey
    '                                                   ^^
    '                                                   ||
    'MsgBox Licenses.Item(0).LicenseKey ' --------------++
    
    ' ACHTUNG:
    ' --------
    
    ' Um ein Steurelement mit Late Binding verwenden zu können,
    ' benötigt man eine Lizenz für das Steuerelement. Auf einem
    ' Entwicklungsrechner auf dem VB installiert ist, ist diese
    ' Lizenz i.d.R. schon vorhanden. Damit das Programm aber auch
    ' auf einem Client Rechner funktioniert muss beim Hinzufügen
    ' der Lizenz, der Lizenz Schlüssel mitangegeben werden:
    
    ' Licenses.Add ProgID [, LicenseKey]
    
    ' Den LicenseKey kann man sich auf einem Entwicklungsrechner
    ' anzeigen lassen wenn man die Message Box auskommentiert.
    ' Das ist der Schlüssel den ihr bei Licenses.Add benötigt damit
    ' das Programm auf einem Client Rechner läuft.
    
    Set lvwTest = Form1.Controls.Add("MSComctlLib.ListViewCtrl.2", "lvwTest")
    lvwTest.Visible = True
    
    lvwTest.object.View = 3
    
    lvwTest.object.ColumnHeaders.Add , , "Spalte 1", 1500
    lvwTest.object.ColumnHeaders.Add , , "Spalte 2", 1500
    
    lvwTest.object.ListItems.Add , , "Item 1"
    lvwTest.object.ListItems(1).SubItems(1) = "SubItem 1"
    
    lvwTest.object.ListItems.Add , , "Item 2"
    lvwTest.object.ListItems(2).SubItems(1) = "SubItem 2"
    
    lvwTest.object.ListItems.Add , , "Item 3"
    lvwTest.object.ListItems(3).SubItems(1) = "SubItem 3"
End Sub

Private Sub Form_Resize()
    lvwTest.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub

Private Sub lvwTest_ObjectEvent(Info As EventInfo)
    Select Case Info.Name
        Case "ItemClick"
            MsgBox "Das Item mit dem Titel '" & _
                Info.EventParameters.Item(0).Value.Text & _
                "' wurde angeklickt."
                
        Case "DblClick"
            MsgBox "Doppelklick"
            
        Case "KeyPress"
            MsgBox "Die Taste '" & Chr(Info.EventParameters(0).Value) & _
                "' wurde gedrückt."
    End Select
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 2 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von hurby am 22.05.2006 um 14:36

ist es auch so möglich ein Objekt zu referenzieren mit dem man ein Button in einer Commandbar in Word anlegt und dann die Events "abfängt". Ich bekomm das irgendwie nicht hin.
Wäre schön wenn mir Jemand auf die sprünge hilft.

MfG hurby

Kommentar von Michael Puchta am 10.06.2005 um 09:22

Hallo,
ich habe mit diesem Beispiel ein Problem, wenn ich ein selbstgebautes OCX laden und aus diesem Ereignisse herausreichen will. Das Laden und Platzieren in der Form funktioniert noch, aber ...
In dem OCX habe ich einen Command-Button, über den ich mit RaiseEvent usw. das Click-Ereignis herausreiche. Beim normalen Einbinden in eine Form funktioniert das auch, aber nicht hier nach dem dynamischen Laden. Im ObjectEvent-Ereignis erfolgt absolut keine Reaktion.
Woran kann es liegen, oder geht das Herausreichen von Ereignissen beim dynamische Laden von einem selbstgebauten OCX generell nicht?
(VB6, Betriebssystem W2000)
Für Hinweise bedanke ich mich schon im voraus.
Mit freundlichen Grüßen
Michael Puchta