Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Clickereignis auf TreeView Node

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
Autor Thema:  Clickereignis auf TreeView Node (2159 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 15. Okt. 2006 13:00    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


TreeViewTest.JPG

 
Hallo zusammen!

Wie bekommt man ein Clickereignis auf ein TreeView Node hin?
Im folgendem Versuch habe ich links eine TreeViewstruktur in der die entsprechenden Layer, etc. angezeigt werden.
Nun möchte ich aber erreichen, daß beim Click auf dem Node z.B. Layer, diese in dem rechten ListView inkl. Icon angezeigt werden.

Code:

Private Sub UserForm_Initialize()
Dim RootNode As MSComctlLib.Node
Dim DrawNode As MSComctlLib.Node
Dim xNode As MSComctlLib.Node
Dim Drawing As AcadDocument
TreeView1.ImageList = ImageList1
For Each Drawing In Application.Documents
    Set RootNode = TreeView1.Nodes.Add(Text:=Drawing.Name, Image:=1)
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Layer", Image:=2)
For Each ActData In Drawing.Layers
    TreeView1.Nodes.Add xNode, tvwChild, , ActData.Name, Image:=2
Next
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Linientypen", Image:=3)
For Each ActData In Drawing.Linetypes
    TreeView1.Nodes.Add xNode, tvwChild, , ActData.Name, Image:=3
Next
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Textstile", Image:=4)
For Each ActData In Drawing.TextStyles
    TreeView1.Nodes.Add xNode, tvwChild, , ActData.Name, Image:=4
Next
Next
End Sub

Vielen Dank im voraus.

Gruß

Dirk

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 15. Okt. 2006 13:22    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

wenn du den Treeview abfüllst speicherst du bei jedem Treeviewnode die "Datenart".

Code:

xNode.Tag = "DRAWING"
xNode.Tag = "LAYER"
etc


Im Treeview Ereignis Nodeclick wertest du dieses Tag ("Datenart") aus und füllst damit den Listview.

Code:

'' Ausschnitt aus Blockinfo
Private Sub TreeView_NodeClick(ByVal Node As MSComctlLib.Node)
    Dim iNode As Node
    Dim iItem As ListItem
    Dim iLayer As AcadLayer
    Dim iBlock As AcadBlock
    Dim iEntity As AcadEntity
    Dim xEntity As Long
    Dim i As Long
   
    ' Max tiefe/anzahl für Elemente
    Const MaxEntity As Long = 1000
   
    ' verwendete Liste speichern
    Set og_Liste = TreeView
    Me.BT_Rename.Enabled = False
    Me.TreeView.LabelEdit = tvwManual
     
    ' Angeklicktes Element anzeigen
    Me.txt_Info = Node.Text
   
    '' Debug Info
    'Me.Caption = Node.FullPath
    'Debug.Print
    'Debug.Print "Key :", Node.key
    'Debug.Print "Text:", Node.Text
    'Debug.Print "Tag :", Node.Tag
   
    Select Case Node.Tag
          Case "ROOT"
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Name", "Kapitel", Me.ListView.Width * 0.99
                Me.ListView.ListItems.Clear
               
                If Not Node.Child Is Nothing Then
                  Set iNode = Node.Child
                  While Not iNode Is Nothing
                        Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                        iItem.ToolTipText = "Thema"
                        iItem.Tag = iNode.key
                        Set iNode = iNode.Next
                  Wend
                End If
               
          Case "LAYOUTS"
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Name", "Layout", Me.ListView.Width * 0.5
                Me.ListView.ColumnHeaders.Add 2, "Blockname", "Blockname", Me.ListView.Width * 0.47
                Me.ListView.ListItems.Clear
               
                If Not Node.Child Is Nothing Then
                  Set iNode = Node.Child
                  While Not iNode Is Nothing
                        Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                        iItem.Tag = "LAYOUT"
                        iItem.SubItems(1) = ThisDrawing.Layouts(iNode.Text).Block.Name
                        Set iNode = iNode.Next
                  Wend
                End If
               
          Case "BLÖCKE"
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Name", "Blockname", Me.ListView.Width * 0.74
                Me.ListView.ColumnHeaders.Add 2, "Count", "Inserts", Me.ListView.Width * 0.25
                Me.ListView.ListItems.Clear
               
                If Not Node.Child Is Nothing Then
                  Set iNode = Node.Child
                  While Not iNode Is Nothing
                       
                        Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                        iItem.Tag = "BLOCK"
                        iItem.SubItems(1) = TreeView.Nodes(iNode.key & "\Count").Child.Text
                        Set iNode = iNode.Next
                  Wend
                End If

            Case "BLOCK", "LAYOUT"
                If Node.Text <> "Model" Then
                  Me.TreeView.LabelEdit = tvwAutomatic
                  Me.BT_Rename.Enabled = True
                End If
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Bez", "Bezeichnung", Me.ListView.Width * 0.73
                Me.ListView.ColumnHeaders.Add 2, "Count", "Anzahl", Me.ListView.Width * 0.25
                Me.ListView.ListItems.Clear
               
                ' Layer sub-Node
                Set iNode = Node.Child
                Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                iItem.SubItems(1) = iNode.Children
                ' Line sub-Node
                Set iNode = iNode.Next
                Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                iItem.SubItems(1) = iNode.Children
                ' Attribute sub-Node
                Set iNode = iNode.Next
                Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                iItem.SubItems(1) = iNode.Children
                ' sub_block sub-Node
                Set iNode = iNode.Next
                Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                iItem.SubItems(1) = iNode.Children
                ' Anzahl Entitys sub-Node
                Set iNode = iNode.Next
                Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                iItem.SubItems(1) = iNode.Child.Text
                ' Anzahl sub-Node
                Set iNode = iNode.Next
                If Not iNode Is Nothing Then
                    ' Anzahl gibt es bei Sub-Nodes nicht
                    Set iItem = Me.ListView.ListItems.Add(, iNode.key, "Inserts")
                    iItem.SubItems(1) = iNode.Child.Text
                End If
               
          Case "LAYERS"
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Name", "Layername"
                Me.ListView.ColumnHeaders.Add 2, "Color", "Farbe", Me.ListView.Width * 0.3
                Me.ListView.ColumnHeaders.Add 3, "VISIBLE", "Sichtbar", Me.ListView.Width * 0.2
                Me.ListView.ColumnHeaders.Add 4, "FREEZE", "Gefroren", Me.ListView.Width * 0.2
                Me.ListView.ListItems.Clear
               
                If Not Node.Child Is Nothing Then
                  Set iNode = Node.Child
                  While Not iNode Is Nothing
                        Set iItem = Me.ListView.ListItems.Add(, iNode.key, iNode.Text)
                        iItem.Tag = "LAYER"
                        Set iLayer = ThisDrawing.Layers(iNode.Text)
                        iItem.SubItems(1) = AcadColor(iLayer)
                        iItem.SubItems(2) = IIf(iLayer.LayerOn = True, "JA", "NEIN")
                        iItem.SubItems(3) = IIf(iLayer.Freeze = True, "JA", "NEIN")
                        Set iNode = iNode.Next
                  Wend
                End If
               
          Case "BLOCKLAYER", "LAYER"
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Name", "Layername"
                Me.ListView.ColumnHeaders.Add 2, "Color", "Farbe", Me.ListView.Width * 0.3
                Me.ListView.ColumnHeaders.Add 3, "VISIBLE", "Sichtbar", Me.ListView.Width * 0.2
                Me.ListView.ColumnHeaders.Add 4, "FREEZE", "Gefroren", Me.ListView.Width * 0.2
                Me.ListView.ListItems.Clear
               
                Me.BT_Rename.Enabled = True
               
                Set iItem = Me.ListView.ListItems.Add(, Node.key, Node.Text)
                iItem.Tag = "LAYER"
                Set iLayer = ThisDrawing.Layers(Node.Text)
                iItem.SubItems(1) = AcadColor(iLayer)
                iItem.SubItems(2) = IIf(iLayer.LayerOn = True, "JA", "NEIN")
                iItem.SubItems(3) = IIf(iLayer.Freeze = True, "JA", "NEIN")
         
          Case "ENTITYS"
                Me.ListView.ColumnHeaders.Clear
                Me.ListView.ColumnHeaders.Add 1, "Name", "Typ", Me.ListView.Width * 0.4
                Me.ListView.ColumnHeaders.Add 2, "Layer", "Layer", Me.ListView.Width * 0.2
                Me.ListView.ColumnHeaders.Add 3, "Linienart", "LinenTyp", Me.ListView.Width * 0.2
                Me.ListView.ColumnHeaders.Add 4, "Farbe", "Farbe", Me.ListView.Width * 0.2
                Me.ListView.ListItems.Clear
               
                If Node.Parent.Tag = "LAYOUT" Then
                  Set iBlock = ThisDrawing.Layouts(Node.Parent.Text).Block
                Else
                  Set iBlock = ThisDrawing.Blocks(Node.Parent.Text)
                End If
               
                xEntity = 0
                For Each iEntity In iBlock
                    xEntity = xEntity + 1
                    If xEntity > MaxEntity Then
                      Set iItem = Me.ListView.ListItems.Add(, "Ent" & xEntity, "weitere.......")
                      Exit For
                    End If
                    Set iItem = Me.ListView.ListItems.Add(, "ENT" & xEntity, iEntity.ObjectName)
                    iItem.SubItems(1) = iEntity.Layer
                    iItem.SubItems(2) = iEntity.Linetype
                    iItem.SubItems(3) = AcadColor(iEntity)
                Next iEntity
         
          Case Else
                Me.ListView.ColumnHeaders.Clear
        End Select
   
End Sub



Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 17. Okt. 2006 21:26    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 Stelli!

Müßte es nicht auch so gehen?

Code:

Public Sub UserForm_Initialize()
Dim RootNode As MSComctlLib.Node
Dim DrawNode As MSComctlLib.Node
Dim xNode As MSComctlLib.Node
Dim Drawing As AcadDocument

TreeView1.ImageList = ImageList1
For Each Drawing In Application.Documents
    Set RootNode = TreeView1.Nodes.Add(Text:=Drawing.Name, Image:=1)
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Layer", Image:=2)
    xNode.Tag = "Layer"
   
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Linientypen", Image:=3)
    xNode.Tag = "Linientypen"
   
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Textstile", Image:=4)
    xNode.Tag = "Textstile"
Next
End Sub


Public Sub TreeView_nodeClick(ByVal Node As MSComctlLib.Node)
Dim ActLayer As AcadLayer
Dim ActLinie As AcadLine
Dim ActText As AcadText

On Error Resume Next

Select Case xNode.Tag

    Case "Layer"
        For Each ActLayer In ThisDrawing.Layers
            ListView1.ListItems.Add Text:=ActLayer.Name
        Next
    Case "Linientypen"
        For Each ActLinie In ThisDrawing.Linetypes
            ListView1.ListItems.Add Text:=ActLinie.Name
        Next
    Case "Textstile"
        For Each ActText In ThisDrawing.TextStyles
            ListView1.ListItems.Add Text:=ActText.Name
        Next
End Select
End Sub


Oder wo liegt mein Fehler?

Gruß

Dirk

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 18. Okt. 2006 10:35    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

stell doch mal die Eigenschaft Listview1.view=lvwReport
und lösche for dem Füllen die Columnheaders mit
Listview1.ColumnHeaders.Clear und füge eine Spalte
mit ListView1.ColumnHeaders.Add 1, "Layer", "Layer", ListView1.Width * 0.99 ein.
Vor allem vor dem Füllen neuer Elemente die alten mit
ListView1.ListItems.Clear entfernen.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 19. Okt. 2006 13:46    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 zusammen!

Hier mal der gesamte Code.
Was mache ich falsch, bzw. wo liegt der Fehler?
Clicke ich im TreeView auf "Layer", "Linientypen" etc. passiert nichts im Bereich ListView.

Code:

Private Sub UserForm_Initialize()
Dim RootNode As MSComctlLib.Node
Dim DrawNode As MSComctlLib.Node
Dim Drawing As AcadDocument
 
TreeView1.ImageList = ImageList1
For Each Drawing In Application.Documents
    Set RootNode = TreeView1.Nodes.Add(Text:=Drawing.Name, Image:=1)
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Layer", Image:=2)
    xNode.Tag = "Layer"
''''''''''''''''''For Each ActData In Drawing.Layers
''''''''''''''''''    TreeView1.Nodes.Add xNode, tvwChild, , ActData.Name, Image:=2
''''''''''''''''''Next
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Linientypen", Image:=3)
    xNode.Tag = "Linientypen"
   
''''''''''''''''''For Each ActData In Drawing.Linetypes
''''''''''''''''''    TreeView1.Nodes.Add xNode, tvwChild, , ActData.Name, Image:=3
''''''''''''''''''Next
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Textstile", Image:=4)
    xNode.Tag = "Textstile"
''''''''''''''''''For Each ActData In Drawing.TextStyles
''''''''''''''''''    TreeView1.Nodes.Add xNode, tvwChild, , ActData.Name, Image:=4
''''''''''''''''''Next
Next
End Sub
Private Sub TreeView_nodeClick(ByVal Node As MSComctlLib.Node)
On Error Resume Next

Dim ActLayer As AcadLayer
Dim ActLinie As AcadLine
Dim ActText As AcadText

Select Case xNode.Tag
    Case "Layer"
        ListView1.View = lvwReport
        ListView1.ListItems.Clear
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Layer", "Layer", ListView1.Width * 0.99
        For Each ActLayer In ThisDrawing.Layers
            ListView1.ListItems.Add Text:=ActLayer.Name
        Next
    Case "Linientypen"
        ListView1.View = lvwReport
        ListView1.ListItems.Clear
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Linientypen", "Linientypen", ListView1.Width * 0.99
        For Each ActLinie In ThisDrawing.Linetypes
            ListView1.ListItems.Add Text:=ActLinie.Name
        Next
    Case "Textstile"
        ListView1.View = lvwReport
        ListView1.ListItems.Clear
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Textstile", "Textstile", ListView1.Width * 0.99
        For Each ActText In ThisDrawing.TextStyles
            ListView1.ListItems.Add Text:=ActText.Name
        Next
End Select
End Sub


In dem Bereich Eigenschaften habe ich bei beiden Steuerelementen in den Grundeinstellungen nichts verändert.

Gruß

Dirk

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 19. Okt. 2006 17:33    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

Irgendwoher kenne ich das doch... 

Wenn du schon ein Beispiel aus nem Buch nimmst solltest du es auch genau machen.
Hier ist der Code für das Anklicken der Einträge:

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Dim ChildNode As MSComctlLib.Node
ListBox1.Clear
If Node.Children = 0 Then Exit Sub
Set ChildNode = Node.Child
Do
  ListBox1.AddItem ChildNode.Text
  Set ChildNode = ChildNode.Next
  If TypeName(ChildNode) = "Nothing" Then Exit Do
Loop
End Sub

Du musst aber auf die Einträge klicken, damit im Listview etwas angezeigt wird. Wenn du auf das Plu-Zeichen klickst wird das Treeview ausgeklappt.

Gruß, Carsten

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 20. Okt. 2006 07:12    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


TreeViewTest.zip

 
Hallo und guten morgen Carsten!

Den ersten Teil "Private Sub UserForm_Initialize()" habe ich aus dem Buch "AutoCAD programmieren mit VBA".
Zu dem zweiten Teil "Private Sub TreeView1_nodeClick(ByVal Node As MSComctlLib.Node)" habe ich verschiedene Dinge aus dem Buch probiert, aber leider ohne Erfolg.

Ich habe das Test-Progrämmchen mal angehangen und würde Dich bitten mal zu schauen, wo ich mich da aufhänge und selber im Weg stehe.

Vielen Dank im voraus.

Gruß

Dirk

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 20. Okt. 2006 13:22    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


TreeView_Test_1.JPG

 
Hallo zusammen!

Oft sind es die kleinen Dinge die einen ärgern können.
Fehler war:

Code:

Select Case xNode.Tag

ohne "x" gehts

Code:

Select Case Node.Tag

Nun werden die Layer, Linietypen und Textstile im ListView angezeigt.
Jetzt fehlt mir noch die Unterscheidung, aus welcher Zeichnung ich gerade die Elemente abrufe.
So bis jetzt, werden immer die aus der zuerst angeklickten genommen.

Code:

Private Sub UserForm_Initialize()
Dim RootNode As MSComctlLib.Node
Dim DrawNode As MSComctlLib.Node
Dim xNode As MSComctlLib.Node
Dim Drawing As AcadDocument
TreeView1.ImageList = ImageList1
For Each Drawing In Application.Documents
    Set RootNode = TreeView1.Nodes.Add(Text:=Drawing.Name, Image:=1)
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Layer", Image:=2)
    xNode.Tag = "Layer"
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Linientypen", Image:=3)
    xNode.Tag = "Linientypen"
    Set xNode = TreeView1.Nodes.Add(RootNode.Index, tvwChild, , Text:="Textstile", Image:=4)
    xNode.Tag = "Textstile"
Next
End Sub

Private Sub TreeView1_nodeClick(ByVal Node As MSComctlLib.Node)
On Error Resume Next
Dim ActLayer As AcadLayer
Dim ActLinie As AcadLineType
Dim ActText As AcadTextStyle
Dim Drawing1 As AcadDocument
For Each Drawing1 In Application.Documents
Select Case Node.Tag
    Case "Layer"
        ListView1.ListItems.Clear
        ListView1.View = lvwReport
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Layer", "Layer", ListView1.Width * 0.99
        For Each ActLayer In Drawing1.Layers
            ListView1.ListItems.Add Text:=ActLayer.Name
        Next
    Case "Linientypen"
        ListView1.ListItems.Clear
        ListView1.View = lvwReport
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Linientypen", "Linientypen", ListView1.Width * 0.99
        For Each ActLinie In Drawing1.Linetypes
            ListView1.ListItems.Add Text:=ActLinie.Name
        Next
    Case "Textstile"
        ListView1.ListItems.Clear
        ListView1.View = lvwReport
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Textstile", "Textstile", ListView1.Width * 0.99
        For Each ActText In Drawing1.TextStyles
            ListView1.ListItems.Add Text:=ActText.Name
        Next
End Select
Next
End Sub


siehe Bildchen.

Wie bekomme ich da noch die Unterscheidung hin?

Gruß

Dirk

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 20. Okt. 2006 13:37    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

im Parent Node des Layers hat du doch den Zeichnungsnamen.
Node.Parent.Text

Du kannst auch bei befüllen das Dokumentobject an das Tag
des Nodes hängen. Ein Tag hat den Typ Variant. Also kannst du nicht nur Texte sondern auch ein Object anhängen.

Code:

RootNode = TreeView1.Nodes.Add(Text:=Drawing.Name, Image:=1)
set RootNode.Tag = Drawing


Da kannt du bei der Auswertung mit
Code:

set Drawing = node.parent.Tag
for each Layer in Drawing
'usw.


drauf zugreifen.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 20. Okt. 2006 13:59    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 Stelli!

Perfekt.
So gehts.

Code:

...
Set RootNode = TreeView1.Nodes.Add(Text:=Drawing.Name, Image:=1)
Set RootNode.Tag = Drawing
...
-------------------------------
...
Select Case Node.Tag
    Case "Layer"
        ListView1.ListItems.Clear
        ListView1.View = lvwReport
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Layer", "Layer", ListView1.Width * 0.99
        Set Drawing1 = Node.Parent.Tag
        For Each ActLayer In Drawing1.Layers
            ListView1.ListItems.Add Text:=ActLayer.Name
        Next

Danke.

Gruß

Dirk

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2021/2022
CAD+T
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 21. Okt. 2006 20:08    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 zusammen!

Wie bekomme ich jetzt vor dem Layer im ListView ein Icon aus der ImageList1 plaziert?
Ich habe es mal so probiert,geht leider aber nicht.

Code:

...
Dim Listi As ListItem
...
...
Set ListView1.Icons = ImageList1
Set ListView1.SmallIcons = ImageList1
ListView1.Sorted = True
...
For Each Drawing1 In Application.Documents
Select Case Node.Tag
    Case "Layer"
        ListView1.ListItems.Clear
        ListView1.View = lvwReport
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Layer", "Layer", ListView1.Width * 0.1
        Set Drawing1 = Node.Parent.Tag
        For Each ActLayer In Drawing1.Layers
            ListView1.ListItems.Add Text:=ActLayer.Name
            Listi.SmallIcon = 2
        Next
...

Gruß

Dirk

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 22. Okt. 2006 11:35    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

wie wärs mit:

Code:

ListView1.ListItems.Add Text:=ActLayer.Name Icon:=1

oder
set Listi= ListView1.ListItems.Add (Text:=ActLayer.Name )
Listi.icon=1



Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 22. Okt. 2006 13:39    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


TreeViewTest_01.JPG

 
Hallo Stelli!

Danke für die Info!
Ich habe es mal so versucht, jedoch ohne Erfolg.

Code:

Private Sub TreeView1_nodeClick(ByVal Node As MSComctlLib.Node)

Dim ActLayer As AcadLayer
Dim ActLinie As AcadLineType
Dim ActText As AcadTextStyle
Dim Test As ListView
Dim Drawing1 As AcadDocument
Dim LV As ListItem

Set ListView1.Icons = ImageList1
Set ListView1.SmallIcons = ImageList1
ListView1.Sorted = True

On Error Resume Next

For Each Drawing1 In Application.Documents

Select Case Node.Tag
    Case "Layer"
        ListView1.ListItems.Clear
        ListView1.View = lvwReport
        ListView1.ColumnHeaders.Clear
        ListView1.ColumnHeaders.Add 1, "Layer", "Layer", ListView1.Width * 0.1
        Set Drawing1 = Node.Parent.Tag
        For Each ActLayer In Drawing1.Layers
            Set LV = ListView1.ListItems.Add(Text:=ActLayer.Name)
            LV.Icon = 1
'
'        ListView1.ListItems.Add Text:=ActLayer.Name Icon:=1
'oder
'Set Listi = ListView1.ListItems.Add(Text:=ActLayer.Name)
'Listi.Icon = 1
          Next


Das Iconsymbol vor dem Layer wird nicht angezeigt, sihe Bildchen.

Gruß

Dirk

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 22. Okt. 2006 14:02    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

bei Ansicht als Report oder Liste wird im Listview das
SmallIcon angezeigt.

Ändere mal die Eigenschaft Icon in SmallIcon . Dann sollte es gehen.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 22. Okt. 2006 21:17    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 Stelli!

Danke , so gehts.

Gruß

Dirk

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)2025 CAD.de | Impressum | Datenschutz