miniversum
Goto Top

Steuerelement (OCX) zur Laufzeit auf Form setzen

Hallo
Ich schreibe gerade unter VBA in Excel 2003 an einem Programm zur Ansteuerung von verschiedenen Geräten für die Datenerfassung und -auswertung. Diese Geräte liefern, zur Ansteuerung, einen Treiber mit der installiert wird. So kann man dann manuel auf eine Form im VBA diese OCX Komponente als Steuerelement auf die Form ziehen und diese dann benutzen. Nun könnte es vorkommen das ich so ein Steuerelement ncith nur einmal plazieren muss sondern mehrmals, abhängig von verschiedenen Gegebenheiten. Daher würde ich gerne, statt dieser manueller Plazierung, das ganze zur Laufzeit machen.
Für einen CommandButton geht das ja z.B. so:
Controls.Add("MSForms.CommandButton.1") ', CommandButton2, Visible)
Aber wie bekomem ich das für eine andere Komponente hin?
Oder muss ich das mit einem ganz anderen Befehl angehen?

miniversum

Content-Key: 103446

Url: https://administrator.de/contentid/103446

Printed on: July 16, 2024 at 20:07 o'clock

Mitglied: 16568
16568 Dec 06, 2008 at 20:32:08 (UTC)
Goto Top
Warum platzierst Du die Elemente nicht schon vorher, aber stellst sie auf invisible, und zur benötigten Aktion eben auf sichtbar?


Lonesome Walker
Member: miniversum
miniversum Dec 07, 2008 at 09:24:54 (UTC)
Goto Top
Weil ich dann begrenzt wäre auf eine bestimmte Anzahl. Das würd ich nur machen wenn es anders ncith geht. Da ich es eben flexibel gestallten möchte wäre mir eine dynamische plazierung zur Laufzeit lieber.
Member: miniversum
miniversum Dec 08, 2008 at 15:42:20 (UTC)
Goto Top
Problem gelöst!
Ich habe die Steuerelemente, da man sie sowieso ncith bedienen kann sondern nur zur Kommunikation dienen, nict auf eine Form gesetzt sondern einer Collection hinzugefügt.
Das ganze sieht dann so aus:
Private ComColl As New collection

Private Sub NewDevice(DeviceDescriptor As String)

    Dim COMObjekt As New tvc

    COMObjekt.Descriptor = DeviceDescriptor 
    
    ComColl.Add COMObjekt

End Sub

Private Sub SendString(DeviceDescriptor As String, Command As String)
    i = 0
    For x = 1 To ComColl.Count
        If ComColl.Item(x).Descriptor = DeviceDescriptor Then i = x
    Next x
    
    If i > 0 Then
        ComColl.Item(i).WriteString Command 
    End If
End Sub

ComColl ist die Colection der jeweils ein neues Gerät zur Laufzeit, hinzugefügt wird.

NewDevice wird aufgerufen wen ein neues Gerät hinzu kommt.
tvc ist dabei der Datentyp der Schnitstelle.
Descriptor ist eine Beschreibung über die jedes Gerät einen eindeutigen Namen zugeteilt bekommt.

SendString sendet an das jeweilige Gerät einen String. Hierzu wird das zugehörige Steuerelement in der Collection gesucht und über dieses Steuerelement gesendet.