anzahl der zeichen der einzelnen items in listbox herausfinden

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Betzi.

    anzahl der zeichen der einzelnen items in listbox herausfinden

    Hallllö!

    Ich bin jetzt gerade dabei, ein kleines Programm zu schreiben: Es sollen ein paar Lieder in eine Listbox eingefügt werden(habe ich schon geschafft^^) und diese sollen dann, wenn man auf einen Button drückt auf die zeichenlänge überprüft werden, und wenn sie mehr als 60 Zeichen haben, wird das entsprechene item rot angezeigt.

    ich weiß irgentwie überhaupt nicht wie ich das lösen soll, hat jemand von euch eine ahnung?
    Mit ner For-Schleife die Items durchgehen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Mach Dir ein kleines Testprojekt mit einer ListBox und einem ListView und probiere aus, was für Deine Bedürfnisse günstiger ist.
    Das kannst nur Du entscheiden. Und sei dann auch so konsequent und schreib Deinen Code um, wenn das ListView besser ist. :thumbsup:
    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!
    Die Listview ist mächtiger, du hast mehrere Spalten, Spaltenheader, verschiedene Ansichten, wie im Explorer LargeIcons, MiniIcons, Liste, Details. Das Handling ist ähnlich einer Listbox.

    VB.NET-Quellcode

    1. ListView1.Items.Add("Name")


    Interessant wirds wenn du noch Spalten hinzufügst, aber auch nicht schwer

    VB.NET-Quellcode

    1. With ListView1.Items.Add("spalte1")
    2. .SubItems.Add("spalte2")
    3. .SubItems.Add("spalte3")
    4. .SubItems.Add("spalte4")
    5. End With
    okay, ich denke, dann bau ich um auf listview, und mach ne 2te spalte, in die lasse ich dann eintragen, ob der dateiname zu lang ist oder nicht.
    danke schonmal... ;)

    edit: soo, mit listbox klappts jetzt so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Label1.Text = BindingSource1.Count.ToString 'Items werden gezählt und in Label eingetragen
    3. Do Until Label2.Text = Label1.Text 'Schleife solange, bis alle Items durchgegangen
    4. ListBox1.SelectedIndex = Label2.Text 'Item wird ausgewählt
    5. If ListBox1.SelectedItem.Length > 60 Then 'Wenn Item Ziffern mehr als 60
    6. MsgBox("Zu Lang") 'dann
    7. Else 'sonst
    8. MsgBox("Passt") 'passt
    9. End If 'end if
    10. Label2.Text += 1 'Nächstes item in label schreiben
    11. Loop 'loop ende
    12. Label1.Text = BindingSource1.Count.ToString 'Items werden gezählt und in Label eingetragen
    13. Label2.Text = "0" 'Label wird zurückgesetzt für nächstes durchgehen
    14. End Sub


    jetzt müsste ich das nurnoch in listview umwandeln, wie gesagt, danke ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Betzi“ ()

    Betzi schrieb:

    listbox1.selectedindex = label2.text

    Gib einem Projekt ganz schnell Option Strict On.

    VB.NET-Quellcode

    1. ListBox1.SelectedItem = label2.text
    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!
    Ein kleines Beispiel wie Du die Items selbst zeichnen kannst
    Zuerst im Designer die Eigenschaft DrawMode von ListBox auf DrawMode.OwnerDrawFixed setzen.

    VB.NET-Quellcode

    1. Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
    2. With DirectCast(sender, ListBox)
    3. e.DrawBackground()
    4. Dim b As Brush
    5. If .Items(e.Index).ToString.Length > 60 Then
    6. b = Brushes.Red ' Text länger als 60 Zeichen -> Rot
    7. Else
    8. b = Brushes.Black ' Sonst schwarz
    9. End If
    10. e.Graphics.DrawString(.Items(e.Index), e.Font, b, New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
    11. e.DrawFocusRectangle()
    12. End With
    13. End Sub
    ohh, dann brauch man ja garnicht prüfen...^^ danke dir, das ist echt cool!

    ich denke, damit hat sich das thema hier erledigt, noch ein paar anpassungen, und das programm ist fertig, danke an alle ;)

    edit: öhmmm.. eigentlich kommt bei mir da ja kein fehler mit dem code, aber wenn ich die form schließen will, kommt doch einer?

    VB.NET-Quellcode

    1. If .Items(e.Index).ToString.Length > 60 Then

    "InvalidArgument=Value mit dem Wert -1 ist für index ungültig. Parametername: index"

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

    Wenn e.Index negativ ist, kommt beim Zugriff damit eine Exception.
    Du musst also den Fall e.Index = -1 abfangen:

    VB.NET-Quellcode

    1. If e.Index = -1 Then
    2. Return
    3. End If
    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!