Listview wird nicht richtig gefüllt

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Listview wird nicht richtig gefüllt

    Hallo und einen schönen Samstag zusammen,
    ich habe folgendes Problem und sitze schon seit 2 Stunden drüber und finde den Fehler nicht. Ich lese die Laufwerke aus und schreibe die Daten in 2 Listviews das funktioniert auch soweit ganz gut aber beim Runden auf GB formatiert er das 4te Feld in der ersten Zeile und das 3te feld in der 2 Zeile nicht (siehe Bild( :S .
    Wäre schön wenn ihr mal drüber schauen könntet, was den Stil betrifft bin ich immer für Verbesserungsvorschläge zu haben (bin ja noch Anfängerin)

    VB.NET-Quellcode

    1. Private Sub fprm1(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim allDrives As DriveInfo() = DriveInfo.GetDrives()
    3. Dim lw As String
    4. Dim Art As String
    5. Dim dformat As String
    6. Dim lf As String
    7. Dim gr As String
    8. Dim fr As String
    9. Quelle.View = View.Details
    10. Quelle.LabelEdit = True
    11. Quelle.AllowColumnReorder = True
    12. Quelle.FullRowSelect = True
    13. Quelle.GridLines = True
    14. Quelle.Sorting = SortOrder.Ascending
    15. Quelle.Columns.Add("Lw", 50, HorizontalAlignment.Left)
    16. Quelle.Columns.Add("Art", 130, HorizontalAlignment.Left)
    17. Quelle.Columns.Add("Frei", 100, HorizontalAlignment.Left)
    18. Quelle.Columns.Add("Größe", 100, HorizontalAlignment.Left)
    19. Ziel.View = View.Details
    20. Ziel.LabelEdit = True
    21. Ziel.AllowColumnReorder = True
    22. Ziel.FullRowSelect = True
    23. Ziel.GridLines = True
    24. Ziel.Sorting = SortOrder.Ascending
    25. Ziel.Columns.Add("Lw", 50, HorizontalAlignment.Left)
    26. Ziel.Columns.Add("Art", 130, HorizontalAlignment.Left)
    27. Ziel.Columns.Add("Frei", 200, HorizontalAlignment.Left)
    28. Ziel.Columns.Add("Größe", 300, HorizontalAlignment.Left)
    29. For Each Drives As System.IO.DriveInfo In allDrives
    30. lw = Drives.ToString
    31. Art = Drives.DriveType.ToString
    32. ' Laufwerk bereit
    33. If Drives.IsReady = False Then
    34. fr = "----"
    35. gr = "----"
    36. lf = "CD"
    37. Else
    38. lf = "CD"
    39. Dim ts As String = Drives.TotalSize
    40. gr = Drives.TotalSize.ToString(Format(ts / 1024 ^ 3, "###0") & " GB")
    41. Dim fre As String = Drives.AvailableFreeSpace
    42. fr = Drives.AvailableFreeSpace.ToString(Format(fre / 1024 ^ 3, "###0") & " GB")
    43. lw = Drives.ToString
    44. End If
    45. 'Typ benennen
    46. Art = Drives.DriveType.ToString
    47. If Drives.DriveType = DriveType.Fixed Then
    48. dformat = "Festplatte"
    49. End If
    50. If Drives.DriveType = DriveType.Removable Then
    51. dformat = "USB / Ext"
    52. End If
    53. If Drives.DriveType = DriveType.Network Then
    54. dformat = "Netzwerk"
    55. End If
    56. If Drives.DriveType = DriveType.CDRom Then
    57. dformat = lf
    58. End If
    59. ' listview füllen
    60. Dim listv As ListView
    61. For Each ctl As Control In Me.Controls
    62. If TypeOf ctl Is ListView Then
    63. listv = ctl
    64. Dim item1 As New ListViewItem(lw)
    65. listv.Items.Add(item1)
    66. item1.SubItems.Add(dformat)
    67. item1.SubItems.Add(gr)
    68. item1.SubItems.Add(fr)
    69. End If
    70. Next
    71. Next
    72. End Sub


    *CodeTags eingefügt* ~NoFear23m

    Bilder
    • Unbenannt.png

      139,02 kB, 1.600×900, 107 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Bitte verwende die Forum-Funktionalität, um Code lesbar hier einzustellen


    Dann solltest du die Geschichte modularer aufbauen.
    Also schreib eine Methode, der du ein Listview übergibst, und die allDrives-Liste, und die Methode befüllt damit das Listview.
    Diese Methode rufst du für beide Listbviews auf und feddich.
    Die Listviews nicht in einer Schleife aus den Controls fummeln.
    Du weisst doch wie die Listviews heissen, das kannste doch verwenden, also sowas sollte bei rauskommen:

    VB.NET-Quellcode

    1. FillListview( Listview1, allDrives)
    2. FillListview( Listview2, allDrives)


    Nu noch das wichtigste: Visual Studio - Empfohlene Einstellungen
    VB.net wird mit völlig idiotischen Einstellungen ausgeliefert, die es Anfängern (und Fortgeschrittenen, die das nicht ändern) irrsinnig schwer machen,
    • Datentypen zu unterscheiden - ja das Konzept 'Datentyp' überhaupt zu verstehen
    • Framework-Methoden zu benutzen
      (stattdessen benutzen sie durchgehend minderwertige Funktionalität, die noch aus vb6 stammt)
    Das fr-fre-availablespace-Dingens funktioniert nicht. Liegt daran, dass Du die ToString-Methode etwas anders als geplant verwendest. Einmal die aktuelle ToString und dann noch die VB6-Format-Funktion. Schreib lieber gleich fr = (Drives.AvailableFreeSpace / 1024 ^ 3).ToString("N0") & " GB" und ggf. noch in den entsprechenden MSDN-Artikel reinschauen.

    btw: Warum eigentlich Drives in For Each Drives In? Ist doch ein Drive. ListView? Naja, etwas obsolet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Dann zahlt er eben deine Stunden.
    Aber tröste dich: Alle Kurse, von denen ich mitgekriegt habe, fand ich ihr Geld nicht wert.
    Die meisten Kursleiter haben sogar noch nie was von Strict On gehört, oder wie giftig der MVB-Namespace ist.

    Ich denk inzwischen, Programmieren lernt man aus sich selbst heraus.
    Wenn man ein Gefühl dafür hat "das ist jetzt zu umständlich, da muss es etwas einfacheres geben (oder gemacht werden)" - dann lernt man recherchieren, herumprobieren, Umständliches auslagern, Dinge nochmal und besser machen etc..

    Hier übrigens meine Empfehlungen, wie man sich vergleichsweise zielstrebig ausbilden kann:
    Datenverarbeitungs-Vorraussetzungen


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()