Während der Laufzeit Labels erstellen - Fehler im code?

  • VB.NET

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

    Während der Laufzeit Labels erstellen - Fehler im code?

    Hallo zusammen,

    Vorweg: ich habe bisher nur VBA in Excel und Access programmiert. Nun habe ich mir VB Express 2010 runtergeladen und komme mit den uterschieden nicht so ganz zurecht.

    Folgene Situation:
    Ich möchte eine Application schreiben, bei der man einen Ordener Auswählt und die Unterordner (in meinem Fall Filme) einließt. Bis hierher funktioniert es.
    Während er in der Do-Schleife jeden einzelnen Ordner findet, soll zu jedem Ordnernamen (entspricht Filmnamen) ein Label in ein Panel eingefügt werden (soll später das Titelbild welches jew. in den Ordnern liegt enthalten)

    Leider erstellt der code jedoch nur EIN Label. Ich bin es schrittweise durchgegangen. Im ersten durchgang ist es bei der ersten position (verändert sich bei jedem durchlauf). Läuft der code komplet duch, ist genau ein Label im Panel mit den zuletzt gefundenen Ordner als Text. Ich vermute eigendlich, das er den vorgegebenen Namen der labels nicht ändert und es nur immer verschiebt.
    Kann aber eig. nicht sein, da beim 2 durchlauf 2 labels (jedoch ohne beschriftung) im Panel sind. In VBA ging das iwie einfacher.

    HILFE!

    Der Code liegt in einer Form. Die Form hast einen Button (Name = "Cmd_SourceOeffnen", ein Panel (Name="Pnl_Filme") und eine Listbox (Name = "Lst_Filmliste") zur kontrolle (Hier werden alle Ordnernamen aufgeführt (funktioniert)

    Code:

    Quellcode

    1. Public Class Form1
    2. Private Sub Cmd_SourceOeffnen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_SourceOeffnen.Click
    3. Dim MainFolder As String
    4. MainFolder = ""
    5. If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
    6. MainFolder = (FolderBrowserDialog1.SelectedPath) & "\"
    7. End If
    8. Call Filmliste(MainFolder, "*")
    9. End Sub
    10. Dim NewLbl As New Label 'Label = New Label()
    11. Private Sub Filmliste(ByVal MainFolder As String, ByVal Filter As String)
    12. Dim Name1 As String
    13. Dim LblCounter As Long
    14. Dim NewLbl As Label = New Label()
    15. LblCounter = 0
    16. Name1 = Dir(MainFolder, vbDirectory) ' Ersten Eintrag abrufen.
    17. Do While Name1 <> "" ' Schleife beginnen.
    18. ' Aktuelles und übergeordnetes Verzeichnis ignorieren.
    19. If Name1 <> "." And Name1 <> ".." Then
    20. ' Mit bit-weisem Vergleich sicherstellen, daß Name1 ein
    21. ' Verzeichnis ist.
    22. If (GetAttr(MainFolder & Name1) And vbDirectory) = vbDirectory Then
    23. If Name1 Like Filter & "*" Then
    24. LblCounter = LblCounter + 1
    25. With NewLbl
    26. .Name = "Lbl_Bild_" & LblCounter
    27. .Text = Name1
    28. .Size = New Size(50, 16)
    29. .Location = New Point(LblCounter * 60, 32)
    30. .BorderStyle = BorderStyle.FixedSingle
    31. End With
    32. Pnl_Filme.Controls.Add(NewLbl)
    33. Lst_Filmliste.Items.Add(Name1) ' Eintrag nur anzeigen, wenn es sich
    34. End If ' um ein Verzeichnis handelt.
    35. End If
    36. End If
    37. Name1 = Dir() ' Nächsten Eintrag abrufen.
    38. Loop
    39. Lst_Filmliste.Sorted = True
    40. End Sub
    41. End Class


    PS: Ist VB Express von der Sprache anders? Normaler weise schreibe ich sowas wie

    Quellcode

    1. Dim LBL As Control
    2. For Col = 1 To 10
    3. Me.Controls.Add "Forms.Label.1", "Lbl_" & Col
    4. Set LBL = Me.Controls("Lbl_" & Col)
    5. LBL.Caption = "Test"
    6. LBL.Height = 12
    7. LBL.Width = 50
    8. LBL.Left = 10
    9. LBL.Top = 10
    10. LBL.BackColor = RGB(R, G, B)
    11. LBL.BorderStyle = 1
    12. LBL.TextAlign = 2
    13. Next Col


    Aber das klappt in VB Express wohl nicht.
    So geht es schon:

    VB.NET-Quellcode

    1. Dim LBL As Label
    2. For Col = 1 To 10
    3. LBL = New Label 'Control
    4. LBL.Name = "Lbl_" & Col
    5. LBL.Text = "Test"
    6. LBL.Height = 12
    7. LBL.Width = 50
    8. LBL.Left = 10
    9. LBL.Top = 10
    10. LBL.BackColor = RGB(R, G, B)
    11. LBL.BorderStyle = 1
    12. LBL.TextAlign = 2
    13. Me.Controls.Add(LBL)
    14. Next Col
    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!
    Klar.
    Jedes Label, jedes Control musst Du einzeln mit New anlegen und zur Control-Collection hinzufügen. :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!