Visual Basic 6.0

Von: , Frage gestellt am Mi, 26. Jan 2000

Ich habe die Aufgabe bekommen ein Visual Basic programm zu schreiben dass :
1. Treeview von Ordnern & Laufwerken
2. Ordnergrösse
3. per checkboxes aktivierte ordner zusammenzählen

1 + 2 ---> kein problem
3 --> ich weiss nich wie ich einen code schreibe der den treeview von oben bis unten nach aktivierten checkboxes durchsucht, diese dann mit dem kompletten pfad des ordners zusammenrechnet....

mfg
Stefan

6 Antworten zu dieser Frage

  1. Antwort von nach 3 Stunden hilfreich
    Re: Visual Basic 6.0

    Hi,

    also im prinzip ist das einfach. Das Treeview besteht ja aus node-objekten.
    nun hat ein einzelner node keine checkbox-eigenschaft oder so ähnlich.
    man kann aber die picture- und die tag-eigenschaft dazu benutzen eine auswahl zu ermöglichen.

    zum durchsuchen benutze man die nodes-auflistung.

    dim n as node
    for each n in tv.nodes
    if n.tag=1 then
    ..
    end if
    next

    das mit dem kompletten pfad verstehe ich nicht ganz, aber ein node-objekt hat eine full-path-eigenschaft die die Keys ausgehend von der Wurzel enthält.

    alle klarheiten beseitigt? gut.

    mfg, holli [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  2. Antwort von nach 4 Stunden hilfreich
    Re: Visual Basic 6.0

    Hi Stefan,
    so ratterst Du den Treeview durch:
    ---------------------------------------
    Dim Node As MSComctlLib.Node
    Dim l As Long
    For l = 1 To Treeview1.Nodes.Count
    Set Node = Treeview1.Nodes.Item(l)
    If Node.Checked Then
    'Dein Summier-Coding z.B.:
    'sum = sum + GetSum(Node.key)
    End If
    Next l
    ----------------------------------------
    Ich persönlich würde immer den ganzen Pfad im Key speichern
    Node.key = <der ganze Pfad>
    dann kannst Du ganz leicht von den einzelnen Pfaden die Datei-Größe summieren!!
    TIP: Der VB-Befehl FileLen(<Datei>) wird Dir von nutzen sein!!

    greets from MichL (Vienna)

    • Antwort von nach 22 Stunden hilfreich
      Re^2: Visual Basic 6.0

      ich bräuchte doch nochmal hilfe
      mein Code zum anzeigen der Grösse des Ordners sieht in etwa s aus :
      Function ShowFolderSize(filespec)


      Set fso=CreateObject("Scripting.Filesystemobject")
      On Error Resume Next
      Set f = fso.GetFolder(tvw1.SelectedItem.FullPath)

      n Error Resume Next
      ordnerpfad = tvw1.SelectedItem.FullPath

      ordnergroesse = Format(f.Size / 1024 / 1024, "0.000")

      hoffe das kann man in etwa erkennen
      meine frage nun : wie baue ich das in den code von dir ein so dass er wirklich alle markierten ordner zusammenzählt ?
      irgendwie krieg ich das nich anz gebacken =(

      danke schonmal im vorraus
      -------------------------------------- Dim Node As MSComctlLib.Node
      Dim l As Long
      For l = 1 To Treeview1.Nodes.Count
      Set Node = Treeview1.Nodes.Item(l)
      If Node.Checked Then
      'Dein Summier-Coding z.B.:
      'sum = sum + GetSum(Node.key)
      End If
      Next l
      ----------------------------------------

      • Antwort von nach 23 Stunden hilfreich
        Re^3: Visual Basic 6.0

        Hi Stefan,
        folgende Funktion gibt Dir die Größe eines Ordner zurück. (OHNE Unterverzeichnisse!!!)

        Aufgerufen wird sie so:
        lngSize = GetFolderSize("c:\winnt\system32", "*.*")

        -----------------------------------------
        Public Function GetFolderSize(ByVal strPath As String, ByVal strWildCard As String) As Long
        Dim objFso As Scripting.FileSystemObject
        Dim objFolder As Scripting.Folder
        Dim objFiles As Scripting.Files
        Dim objFile As Scripting.File
        Dim lngSize As Long

        Set objFso = New FileSystemObject

        Set objFolder = objFso.GetFolder(strPath)
        Set objFiles = objFolder.Files

        If strWildCard = "" Then strWildCard = "*"
        strWildCard = UCase$(strWildCard)
        For Each objFile In objFiles
        If UCase$(objFile.Name) Like strWildCard Then
        lngSize = lngSize + objFile.Size
        End If
        Next

        Set objFile = Nothing
        Set objFiles = Nothing
        Set objFolder = Nothing
        Set objFso = Nothing

        GetFolderSize = lngSize

        End Function
        -----------------------------------------

        Jetzt brauchst Du nur mehr den TreeView durchrattern und das sieht dann so aus: (unter der Annahme das im "Node.key" der ganze Pfad steht!!!! - der ganze Pfad ist ja eindeutig-einmalig und kann daher auch als "Key" verwendet werden!!!!)
        -------------------------------------------

        Dim Node As MSComctlLib.Node
        Dim l As Long
        Dim lngSize as long

        For l = 1 To Treeview1.Nodes.Count
        Set Node = Treeview1.Nodes.Item(l)
        If Node.Checked Then
        lngSize = lngSize + GetFolderSize(Node.key, "*.*")
        End If
        Next l

        Debug.Print "Gesamt-Größe: " & lngSize
        ----------------------------------------

        Schau's Dir genau an ... funktioniert nämlich!!

        greets from MichL (Vienna)

        • Antwort von nach einem Tag hilfreich
          Re^4: Visual Basic 6.0

          yooo ;)
          dankeschön, hat alles wunderbar geklappt
          Habs nur etwas umgeschrieben so dass er auch die unterverzeichnise einbezieht etc

          Naja, einmal fertig, tut sich ein neues Problem auf ;)) :

          Sobald ich ein Drive anklicke schmiert er ab, ok das er abschmiert hab ich weggbekommen aber schön wärs dennoch noch, wenn er mir die grösse des drives mit zu rechnen könnte....falls es angeklickt is

          ich habs mit unzähligen sachen versucht
          if node.checked = drv.drivetype then....
          naja jedenfalls hab ich es nie ganz hinbekommen....

          Und dann.....da ich bei mri so ziemlich viele netzlaufwerke habe, müsste er die auch einbeziehen, macht er aber nich *grmpf*
          schon die grösse von sonem ding zu berechnen.... argl

          naja vielen dank nochmal ;)

          • Antwort von nach einem Tag hilfreich
            Re^5: Visual Basic 6.0

            Hi,
            ganz hab' ich Dein Problem eigentlich nicht behirnt ... das gleiche soll auch mit Laufwerken funktionieren????

            wie wäre es mit:
            ----------------------
            Dim objFSO As Scripting.FileSystemObject
            Dim objFolder As Folder

            Set objFSO = New Scripting.FileSystemObject
            Set objFolder = objFSO.GetFolder("c:\")
            Debug.Print objFolder.Size
            -------------------------------------------

            Funktioniert ... auch mit Netzlaufwerken!!

            greets from MichL (Vienna)

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!