Avatar billede syscom Nybegynder
26. oktober 2000 - 20:41 Der 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.


jeg kan desuden kontakes på laptop@3rdpixel.com
Avatar billede nolle_k Nybegynder
28. oktober 2000 - 09:57 #1
Davs!

Her kommer en længere smøre!


Du gør følgende!


Opret en klasse og kald denne clsParent

\'************* clsParent *****************

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
 
End Sub



Spørg endelig løs hvis der er problemer!


Avatar billede syscom Nybegynder
28. oktober 2000 - 13:36 #2
kan jeg ikke få dig at sende eksempelt til mig? (laptop@3rdpixel.com)

- delen med vb builder\'n fatter jeg ikke, dét har jeg aldrig brugt før.
Avatar billede nolle_k Nybegynder
28. oktober 2000 - 14:24 #3
Jo Da!!
Avatar billede nolle_k Nybegynder
28. oktober 2000 - 14:28 #4
Prøv at udforske det med VBClassBuilder! Det er genialt!!! Men det ser du vel når du prøver mit eksempel!
Avatar billede syscom Nybegynder
28. oktober 2000 - 14:39 #5
Okay, i\'ll do that. Det virker jo kanon dit eksempel!! Takker!
Avatar billede nolle_k Nybegynder
29. oktober 2000 - 13:35 #6
Velbekomme du!!!

Skulle det være en anden gang! Fornøjelsen er helt på min side! (Så har jeg måske alligevel fundet den rette hylde!!!) *GGG*
Avatar billede syscom Nybegynder
29. oktober 2000 - 14:56 #7
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel