Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Per Code erzeugtes Steuerelement - (Klick-)Event erstellen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Per Code erzeugtes Steuerelement - (Klick-)Event erstellen (2481 mal gelesen)
geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 05. Dez. 2011 13:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich schon wieder   

Nach stundenlanger Recherche, bin ich meinem Ziel schon ziemlich nahe gekommen, aber es funktioniert einfach noch nicht.. Ich möchte dynamisch Steuerelemente (z.B. Button oder CheckBox) erstellen und gleichzeitig ein Click Ereignis erstellen.. Verwenden möcte ich den Code z.B. um eine Liste von Parts in einem Produkt oder Körpern in einem Part auszugeben..

Bisheriger Code:

Code:

Private Sub CommandButton1_Click()

Dim Button2
Set Button2 = UserForm1.Controls.Add("Forms.CommandButton.1")

With Button2

    .Name = "CommandButton2"
    .Caption = "Button2"
   
End With

Dim oAPC As New MSAPC.Apc

Dim VBAEditor As VBIDE.VBE
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule

Set VBAEditor = oAPC.VBE
Set VBProj = VBAEditor.ActiveVBProject
Set VBComp = VBProj.VBComponents("UserForm1")
Set CodeMod = VBComp.CodeModule
       
With CodeMod

    LineNum = .CreateEventProc("Click", "CommandButton2")
    LineNum = LineNum + 1
    .InsertLines LineNum, ""
   
End With

End Sub


Also er erstellt den Button mit dem Namen "CommandButton2", doch beim erstellen des Click-Ereignisses kommt immer "Run-time error '57017': Event handler is invalid".. Ändere ich die entsprechende Zeile in

Code:
LineNum = .CreateEventProc("Click", "CommandButton1")
erstellt er das Ereignis für "CommandButton1".. Der "CommandButton2" ist aber definitiv da und heißt auch so..   

Edit:

Nach weiterer Recherche scheint das nicht so ohne weiteres möglich zu sein, habe mich jetzt an einer anderen Variante versucht, geht allerdings auch nicht :(

Code:

Private Sub CommandButton1_Click()

Dim Button2
Set Button2 = UserForm1.Controls.Add("Forms.CommandButton.1")

With Button2

    .Caption = "Button2"
    .Name = "CommandButton2"
    .OnClick = "=KlickEvent()"
   
End With

End Sub


Hier bringt er mir "Run-time error '438': Object doesn't support this property or method" bei der Zeile, wo ich der Eigenschaft ".OnClick" die Prozedur "KlickEvent()" zuweise..

Ist das denn überhaupt der richtige Ansatz, um so etwas umzusetzen? Bis jetzt hatte ich die Controls alle vorher erstellt und habe sie dann nur sichtbar gemacht, aber das kann doch nicht der beste Weg sein.. 

[Diese Nachricht wurde von geekv5 am 05. Dez. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

gladly
Mitglied



Sehen Sie sich das Profil von gladly an!   Senden Sie eine Private Message an gladly  Schreiben Sie einen Gästebucheintrag für gladly

Beiträge: 56
Registriert: 02.11.2007

Catia V5R19SP9HF40 64Bit
Windows XP Pro x64

erstellt am: 05. Dez. 2011 17:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für geekv5 10 Unities + Antwort hilfreich

Guten Tag,

am besten macht man dies mit einer Klasse. Hier ein Beispiel mit einer Kapsel-Klasse für einen CommandButton:

Code:

'Klasse1
Option Explicit

Public WithEvents myCmd As MSForms.CommandButton

Private Sub myCmd_Click()
    MsgBox (myCmd.Name & " gedrückt")
End Sub

Private Sub Class_Initialize()
'Klasse erstellt
End Sub

Public Sub Init(Form As UserForm, Name As String)
    Set myCmd = Form.Controls.Add("Forms.CommandButton.1", Name)
End Sub


Genutzt wird es dann ganz einfach folgend:

Code:

Option Explicit
Private myColl As New Collection
'Private bla As Klasse1 'Falls nur ein Objekt benötigt wird, was aber unwahrscheinlich ist, dieses an und Collection aus

Private Sub CommandButton1_Click()
Dim bla As Klasse1
Set bla = New Klasse1
Call bla.Init(Me, "cmd_Test")
bla.myCmd.Caption = "Blablabla"
myColl.Add bla 'Nur wenn auch Collection oben erstellt.


Wichtig ist das die Klasse in einem Global-Object ist. Solltest du die Collection auskommentieren wird der Code zwar druchlaufen, aber keine Events geschlossen.
Also entweder das "Dim bla as Klasse1" außerhalb der Sub-Routine (Oben als Private bla as ... vorgemerkt) oder aber zur Globalen Collection hinzufügen!!!!

mfg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 05. Dez. 2011 18:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo gladly,

habe mal versucht, deinen Code zu testen und zwar habe ich den ersten Code in ein leeres Klassenmodul kopiert, dann einen Button erstellt und ihm den zweiten Code zugewiesen..

Wenn ich jetzt den Button klicke bricht er bei

Code:
Dim bla As Klasse1

mit "User-defined type not defined" ab.. Muss ich "Klasse1" noch irgendwie deklarieren?

Edit:

Kommando zurück, die erstelle Klasse heißt bei mir "Class1", dementsprechend funktioniert es jetzt.. Danke erstmal, ist der Abend wieder gerettet 

[Diese Nachricht wurde von geekv5 am 05. Dez. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz