Pfad als Reihenfolge von Buttons darstellen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ADB.

    Pfad als Reihenfolge von Buttons darstellen

    Guten Morgen.

    Es sind bereits zu viele Stunden vergangen, ohne dass ich auf eine Lösung für mein Problem gekommen bin.
    Evtl. kann mir jemand mit einem kleinen "Wink" auf die Sprünge helfen.

    Ich möchte, ähnlich wie beim Explorer in Windows 10, einen Dateipfad zerlegen und als Button darstellen, damit ich direkt in ein Verzeichnis wechseln kann.
    z.B. soll der Pfad
    C:\Users\ADB\Projekte\Programmieren\Buttons
    als Button nebeneinander "C:\" -> "Users" -> "ADB" -> "Projekte" -> "Programmieren" -> "Buttons" dargestellt werden. Ein Klick auf "ADB" soll ins Verzeichnis C:\Users\ADB\ wechseln.

    Folgenden Code habe ich dafür verwendet:

    VB.NET-Quellcode

    1. ListBox4.Items.Clear()
    2. Dim ArrayDerPfad() As String
    3. ArrayDerPfad = DerPfad.Split(CChar("\"))
    4. For Each button As Control In Me.Controls
    5. If TypeOf button Is Button And button.Name.Contains("MyButti") Then
    6. ListBox4.Items.Add("Delete: " & button.Name.ToString & " -- " & button.Text)
    7. Me.Controls.Remove(button)
    8. End If
    9. Next
    10. ListBox4.Items.Add("---------------")
    11. For i As Integer = 1 To ArrayDerPfad.Length - 1
    12. Dim NeuerButton As New Button
    13. NeuerButton.AutoSize = True
    14. NeuerButton.Width = 10
    15. NeuerButton.Name = "MyButt_" & ZusatzZahl & i
    16. NeuerButton.Text = ArrayDerPfad(i)
    17. NeuerButton.FlatStyle = FlatStyle.Flat
    18. NeuerButton.FlatAppearance.BorderColor = Color.Red
    19. NeuerButton.ForeColor = Color.Red
    20. NeuerButton.Location = New Point(X_Position_Button_Pfad, 300)
    21. Dim myNewArray As String()
    22. myNewArray = lbl_Pfad_zu_zu_verschiebender_Datei.Text.Split({ArrayDerPfad(i)}, StringSplitOptions.None)
    23. NeuerButton.Tag = myNewArray(0) & ArrayDerPfad(i)
    24. ListBox4.Items.Add("Add: " & NeuerButton.Name & " -- " & NeuerButton.Text)
    25. Me.Controls.Add(NeuerButton)
    26. NeuerButton.BringToFront()
    27. X_Position_Button_Pfad = X_Position_Button_Pfad + NeuerButton.Size.Width + 3
    28. AddHandler NeuerButton.Click, AddressOf MyButt_click
    29. Next
    30. X_Position_Button_Pfad = 15
    31. ZusatzZahl = ZusatzZahl + 1




    VB.NET-Quellcode

    1. Private Sub MyButt_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Dim myButton As Button = CType(sender, Button)
    3. If myButton.Name.Contains("MyButt") Then
    4. ButtonsDateiPfadErzeugen(myButton.Tag.ToString)
    5. End If
    6. End Sub


    Mein Prolbem ist, dass wenn ich bespielsweise auf den Button "ADB" klicke, wird nur jede 2. Button entfernt bzw. in die Listbox geschrieben, ob wohl in "Me.Controls" alle Buttons aufgelistet werden.

    Wo mache ich da den Denkfehler?

    Besten Dank bereits im Voraus.

    Gruss ADB
    @ADB Zunächst behandelst Du den Pfad wie eine Pfad, nicht aber wie einen String :!:
    Pack den Pfad in eine DirectoryInfo-Instanz. Sieh Dir die Property .Parent an. Da hast Du den kompletten (Teil-)Pfad drinne.
    Dann gugst Du Dir das FlowLayoutPanel an, in so eins solltest Du Deine Button reinpacken.
    Und den Rest packst Du allein. :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!
    Hallo RodFromGermany.

    Danke für deine Antwort.

    Diese zwei Hinweise sind aber nur reine "Formsache", oder?

    Wenn ich Me.Controls ersetzte durch Me.FlowLayoutPanel1 werden die ganzen Buttons seltsamerweise wild durcheinandergewürfelt. Mein Hauptproblem ist ja, dass beim Drücken eines während der Laufzeit erstellten Buttons stets nur jeder zweite Button gelöscht wird. Wie kann denn das sein, obwohl dass im Me.Controls alle Buttons aufgelistet werden??

    ADB schrieb:

    Wenn ich Me.Controls ersetzte durch Me.FlowLayoutPanel1
    Du sollst Die Buttons in ein FlowLayoutPanel packen, da musst Du Dich um eine Reihe von Properties nicht kümmern.
    Wenn Du mit Verzeichnisbäumen arbeitest, nimm die Klasse DirectoryInfo, weil sie von Bill genau dafür erfunden wurde. 8o
    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!