[VB 2012] Controls edieren/löschen/hinzufügen die per For-Schleife im Code erstellt wurde

  • VB.NET

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

    [VB 2012] Controls edieren/löschen/hinzufügen die per For-Schleife im Code erstellt wurde

    Ich wollte ein Programm erstellen, dass die Festplatten aufzählt. Das klappt zwar soweit, aber ich schaffe es nicht die Information zu updaten (wenn ein Speichermedium hinzugefügt wird , gelöscht wird oder sich der belegte Speicherplatz ändert)
    Kleine Verbildlichung imgur.com/JvMaQvx

    Erstmal der Code :

    VB.NET-Quellcode

    1. Sub festplatte()
    2. Dim allDrives() As DriveInfo = DriveInfo.GetDrives()
    3. Dim d As DriveInfo
    4. Dim I As Integer
    5. For Each d In allDrives
    6. If d.IsReady = True Then
    7. Try
    8. ' Intelize controls
    9. Dim progressbar As ProgressBar = New ProgressBar
    10. Dim pbgroup As GroupBox = New GroupBox
    11. Dim info As Label = New Label
    12. Dim type As Label = New Label
    13. Dim format As Label = New Label
    14. Dim Space As Double = d.TotalFreeSpace / d.TotalSize
    15. ' Add to tab
    16. Me.Tab_M.Controls.Add(progressbar)
    17. Me.Tab_M.Controls.Add(pbgroup)
    18. Me.Tab_M.Controls.Add(info)
    19. Me.Tab_M.Controls.Add(type)
    20. Me.Tab_M.Controls.Add(format)
    21. ' Add to group
    22. pbgroup.Controls.Add(progressbar)
    23. pbgroup.Controls.Add(info)
    24. pbgroup.Controls.Add(type)
    25. pbgroup.Controls.Add(format)
    26. pbgroup.Text = d.Name & " | Name : " & CheckName(d.VolumeLabel.ToString())
    27. pbgroup.Size = New System.Drawing.Size(600, 65)
    28. pbgroup.Location = New System.Drawing.Point(8, I * 70 + 40)
    29. ' format
    30. format.AutoSize = True
    31. format.Name = "format" & I
    32. format.Location = New System.Drawing.Point(435, 36)
    33. format.Text = "Format : " & d.DriveFormat
    34. ' Typ
    35. type.AutoSize = True
    36. type.Name = "type" & I
    37. type.Location = New System.Drawing.Point(435, 16)
    38. type.Text = "Art : " & GetDriverFormat(d)
    39. ' info
    40. info.Name = "info" & I
    41. info.Location = New System.Drawing.Point(6, 16)
    42. info.AutoSize = True
    43. ' Info Text :: 1000 MB Grenze
    44. If d.TotalFreeSpace > Math.Pow(1024, 3) Then
    45. info.Text = "Benutzter Speicher beträgt : " & Math.Round((d.TotalSize - d.TotalFreeSpace) / btogb, 2) & " GB von " & Math.Round((d.TotalSize) / btogb, 2) & " GB (" & Math.Round(100 - Space * 100, 2) & " % )"
    46. Else
    47. info.Text = "Benutzter Speicher beträgt : " & Math.Round((d.TotalSize - d.TotalFreeSpace) / btomb, 2) & " MB von " & Math.Round((d.TotalSize) / btomb, 2) & " MB (" & Math.Round(100 - Space * 100, 2) & " % )"
    48. End If
    49. 'Progressbar
    50. progressbar.Size = New System.Drawing.Size(425, 23)
    51. progressbar.Location = New System.Drawing.Point(6, 32)
    52. progressbar.Name = "Memory" & I
    53. progressbar.Value = 100 - Space * 100
    54. Catch ex As Exception
    55. MsgBox(ex.ToString())
    56. End Try
    57. I += 1
    58. End If
    59. Next
    60. End Sub


    Folgende Funktionen sind noch vorhabenden :

    VB.NET-Quellcode

    1. Function GetDriverFormat(ByVal driver As DriveInfo) As String
    2. Select Case driver.DriveType
    3. Case DriveType.CDRom
    4. GetDriverFormat = "CDRom Laufwerk"
    5. Case DriveType.Fixed
    6. GetDriverFormat = "Festplatte"
    7. Case DriveType.Network
    8. GetDriverFormat = "Netzwerk"
    9. Case DriveType.NoRootDirectory
    10. GetDriverFormat = "Kein Rootpfad"
    11. Case DriveType.Ram
    12. GetDriverFormat = "Ram"
    13. Case DriveType.Removable
    14. GetDriverFormat = "Austauschbares Medium"
    15. Case DriveType.Unknown
    16. GetDriverFormat = "Unbekannt"
    17. End Select
    18. End Function


    und

    VB.NET-Quellcode

    1. Function CheckName(ByVal name As String) As String
    2. If name = Nothing Then
    3. checkName = "Kein Name"
    4. Else
    5. checkName = name
    6. End If
    7. End Function


    Leider sind meine VB-Kentnisse nicht so ausgerägt(bin ja noch Schuüler), habe auch schon viel mich umgeguckt (z.B eine List zu machen), was aber alles fehlgeschlafen ist :(
    Daraus ergibt sich meine Fragestellung : Wie kann ich auch Controls eingreifen, die ich per code generiert habe bezogen auf meinen Code.(Mit eingreifen meine ich edieren/löschen/hinzufügen)
    Wenn es aber auch eine viel einfachere/andere Möglichkeit/Problemlösung gibt, diese Infos von Speichermedien darzustellen, dann würde ich es begrüßen diese auch zu erfahren.
    Willkommem im Forum erstmal ;)
    Versuch es mal mit einem Dictionary, da kannst du Items mit einer eindeutigen ID, in deinem Fall den Laufwerksbuchstaben hinzufügen. Beispiel:

    Visual Basic-Quellcode

    1. Dictionary<String, Label> drivelabels = New Dictionary<String, Label>()
    2. For Each d In allDrives
    3. ' ...
    4. drivelabels.Add(d.Name & "Info", info)
    5. ' ...
    6. ' Abrufen Geht so:
    7. Label info = drivelabels(d.Name & "Info")


    Sorry für Fehler, bin grad unterwegs.
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Willkommen im Forum. :thumbup:

    SenseSenpai schrieb:

    Kleine Verbildlichung
    Lass das mit den selbsterstellten Controls, das bringt nur Ärger.
    Entweder Du machst Dir einen schmucken Dialog oder ein UserControl, wo Du alles bestens darstellen kannst. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dankeschön :)

    Wie würde das dann aussehen ? Habe davon noch nicht gehört gescheiwegedenn eine Idee wie ich das mit wem Dialog/UserControl umsetzen soll. (Dialog hört sich für mich nach was an wo der User aktiv was machen muss oder vertausche ich da was ) Es sollen ja grundsätzlich halt alle Speichermedien angezeigt werden und aktualisiert werden.

    Unnötiges Vollzitat entfernt.
    - Solaris

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

    Fang mit einem

    SenseSenpai schrieb:

    Dialog
    an.
    Projekt-Hinzufügen-neue Form
    Mach da Deine Controls drauf, und zum Aufruf gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!