26. oktober 2000 - 20:41Der er
6 kommentarer og 1 løsning
Generer et treeview med undermenuer med én linie
Halløj, jeg har siddet (i alt for lang tid) og bøvlet med mit treeview i VB6 Pro, jeg vil gerne ha\' lavet så\'n at jeg f.eks. har gemt en \"opsætning\" i en text fil.
Kunne så sådan ud: (består KUN af en linie, VIGTIGT) CD*%Disco*%%CD1*%%CD2*Video*%%V1*%%V2*
og skal derefter kunne gennere et treeview som ser sådan ud:
CD |- Disco |-CD1 |-CD2 Video |-V1 |-V2
Kan virke lidt uoverskueligt, men kan forklares sådan her: CD*%Disco*%%CD1*%%CD2*Video*%%V1*%%V2*
Ved hvert \"*\" skal den skifte linie (altså udfører kommandoen til at add\'e en node)
Ved hvert \"%\" defineres hvilket level de forskellige nodes skal ha, én \"%\" rykker den én ind, og 2 \"%\" flytter den 2 ind. osv.
Også skal den selvfølgelig ta\' teksten og smide i noden.
Private m_Name As String Private m_Child As New clsParents
Public Property Let Name(Name As String) m_Name = Name End Property
Public Property Get Name() As String Name = m_Name End Property
Public Property Get Children() As clsParents Set Children = m_Child End Property
\'*************************************
Opret endnu en klasse med brug denne gang VBClassBuilder til at lave en Collection over clsParent! (Håber du er med!!) Kald denne clsParents
Denne skal se sådan ud! Sammenlign og ret til. NB!!!! Det kan ikke lade sig gøre at kopiere min kode
\'**************** clsParents *************
Private Const NEWLEVEL = \"%\" \'local variable to hold collection Private mCol As Collection Private m_ActiveParent As String
Public Function Add(Name As String) As clsParent \'create a new object Dim objNewMember As clsParent
\'********* ADDED CODE ******************* If (InStr(1, Name, NEWLEVEL) > 0) Then \'Remove NewLevel Debug.Print \"-\"; Item(m_ActiveParent).Children.Add Right(Name, Len(Name) - 1) Else \'******** END ADDED CODE **************** Set objNewMember = New clsParent
\'set the properties passed into the method objNewMember.Name = Name mCol.Add objNewMember, Name
\'return the object created Set Add = objNewMember
Debug.Print Name m_ActiveParent = Name
Set objNewMember = Nothing End If End Function
Public Property Get Item(vntIndexKey As Variant) As clsParent \'used when referencing an element in the collection \'vntIndexKey contains either the Index or Key to the collection, \'this is why it is declared as a Variant \'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5) Set Item = mCol(vntIndexKey) End Property
Public Property Get Count() As Long \'used when retrieving the number of elements in the \'collection. Syntax: Debug.Print x.Count Count = mCol.Count End Property
Public Sub Remove(vntIndexKey As Variant) \'used when removing an element from the collection \'vntIndexKey contains either the Index or Key, which is why \'it is declared as a Variant \'Syntax: x.Remove(xyz)
mCol.Remove vntIndexKey End Sub
Public Property Get NewEnum() As IUnknown \'this property allows you to enumerate \'this collection with the For...Each syntax Set NewEnum = mCol.[_NewEnum] End Property
Private Sub Class_Initialize() \'creates the collection when this class is created Set mCol = New Collection End Sub
Private Sub Class_Terminate() \'destroys collection when this class is terminated Set mCol = Nothing End Sub
\'***************************************
På en form indsæt en knap og et TreeView
Kopier følgende ind i Form koden
Dim m_TreeView As New clsParents
Private Const NEWLINE As String = \"*\" Private Sub DoTheStructure(Str As String)
Dim pos As Long Dim tmpPos As Long Dim NodeName As String
pos = 0
pos = InStr(1, Str, NEWLINE)
tmpPos = IIf(pos > 0, pos, Len(Str))
pos = 1
Do NodeName = Mid(Str, pos, tmpPos - pos) pos = tmpPos m_TreeView.Add NodeName tmpPos = InStr(pos + 1, Str, NEWLINE) \'Remove NewLine pos = pos + 1 Loop While tmpPos > 0 End Sub
Private Sub DoTheTreeView(TWS As clsParents, Optional Parent As String = \"\") Dim p As clsParent Dim Cookie As String
\'If (TWS Is Nothing) Then \' Exit Sub \'End If
For Each p In TWS Cookie = GetCookie(p.Name) If (Parent = \"\") Then TreeView1.Nodes.Add , , Cookie, p.Name Else TreeView1.Nodes.Add Parent, tvwChild, Cookie, p.Name End If DoTheTreeView p.Children, Cookie Next End Sub Private Function GetCookie(ByVal Str As String) As String Static CookieMaker As Integer
CookieMaker = (CookieMaker + 1) Mod 32000
GetCookie = CStr(CookieMaker) + Str
End Function
Private Sub Command1_Click() TreeView1.LineStyle = tvwRootLines DoTheStructure \"CD*%Disco*%%CD1*%%CD2*%HipHop*%%CD1*%%CD2*%%%Yes*Video*%V1*%V2*\" DoTheTreeView m_TreeView
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.