Eintrag in Listbox programmgesteuert markieren, geht das überhaupt?

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

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von billy5.

    Eintrag in Listbox programmgesteuert markieren, geht das überhaupt?

    Hallo allerseits,

    Hintergrund der Fragestellung: In einer Listbox befindet sich ein String, der in mehrere Zeilen (jeweils getrennt über vbCrLf) aufgeteilt ist. Mittels Suchfunktion aus mehreren Einträgen in der Listbox wird einen Teilstring über den Befehl ListBox1.Items(i).ToLower.Contains(iStr.ToLower) schleifengesteuert gesucht und - falls vorhanden - gefunden. Den Treffer lasse ich mir derzeit in einer Messagebox anzeigen. Soweit so gut, nur: ich hätte gerne auch die Zeile in der Listbox, die den Suchtreffer beinhaltet, markiert.
    Leider geht das nach meinen Recherchen nur über ListView. Daher kam mir die Idee, ein Mouseklick-Ereignis, ein Key-Ereignis oder ein sonstiges zu simulieren, das programmgesteuert die Textzeile marliert, die den Suchtreffer beinhaltet. Geht das überhaupt? Und wenn ja, wie?
    (Zugegeben, sehr gewagt)

    Gruß
    billy5

    billy5 schrieb:

    Mittels Suchfunktion
    wenn das ne For-Schleife ist, kannst Du doch dort auch SelectedIndex (bei For) bzw. SelectedItem (For oder For-Each) setzen.
    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“ ()

    Hallo VaporiZed,

    könntest du bitte deine Antwort etwas möblieren, heißt: etwas Code aufzeigen? Wie setze ich da vor der MsgBox deinen Vorschlag ein?

    For i.......
    If ListBox1.Items(i).ToLower.Contains(iStr.ToLower) Then
    MsgBox("Suche: " & iStr & vbCrLf & "Datensatz Nr. " &
    i + 1 & vbCrLf & vbCrLf & ListBox1.Items(i))
    End If
    Next

    Gruß
    billy5

    billy5 schrieb:

    etwas Code aufzeigen?
    Wie beschaffe ich mir Information?
    Du hast alles, was Du wissen musst. Eins und eins zusammenzählen must Du allerdings selbst.

    billy5 schrieb:

    Listbox

    VaporiZed schrieb:

    SelectedIndex (bei For) bzw. SelectedItem (For oder For-Each)
    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,

    ich hatte VaporiZed um Antwort gebeten. Und ich habe gelernt, eins und eins zu addieren. Dafür, dass ich relativ neu in der Materie stecke, kann ich nichts. Um Missverständnissen vorzubeugen, hier in Kurzform meine Problemschilderung etwas simpler:
    Die Listbox hat z.B. zeilenweise 5 Einträge

    Text1
    Text2
    .
    Text5

    Der Suchtext sei innerhalb des Text2 gefunden worden. Den Index des Text 2 habe ich über die Schleife erhalten.
    Nun möchte ich, dass mein Programm die Zeile mit dem Inhalt "Text2" z.B. schwarz markiert.

    Gruß
    billy5
    Definiere

    billy5 schrieb:

    z.B. schwarz markiert.
    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!
    Bzgl. Deines Codes in Post#3: Vor die Zeile der MsgBox eben noch ListBox1.SelectedIndex = i

    billy5 schrieb:

    ich hatte VaporiZed um Antwort gebeten
    Bin leider gerade unterwegs, aber zum Glück ist das Forum ja quasi ein Gemeinschaftsobjekt.

    billy5 schrieb:

    weiße Schrift auf schwarzem Grund.
    Geht leider mit ner normalen ListBox nicht. Da fiele das Wort OwnerDrawing. Aber vielleicht reicht ja die Standard-Blau-Markierung durch SelctedIndex.
    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.
    Ich habe noch nie eine Listbox benutzt aber der schon genannte SelectedIndex liefert dir das was du möchtest.
    Nimm den VisualBasic Namespace erstmal aus deinem Projekt und dann nochmal den Code richtig schreiben.
    MsgBox und vbcrlf sollen nicht mehr vorkommen. Alternativen wären MessageBox und Environment.Newline

    Edit . Kollege vor mir war schneller am Handy als ich.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    billy5 schrieb:

    Daher meine Bitte um Code.
    :huh:
    Guckst Du Post#8:

    VaporiZed schrieb:

    Bzgl. Deines Codes in Post#3: Vor die Zeile der MsgBox eben noch ListBox1.SelectedIndex = i
    Daraus ergibt sich, hier mit VB-CodeTags:

    VB.NET-Quellcode

    1. For i.......
    2. If ListBox1.Items(i).ToLower.Contains(iStr.ToLower) Then
    3. ListBox1.SelectedIndex = i
    4. MsgBox("Suche: " & iStr & vbCrLf & "Datensatz Nr. " & i + 1 & vbCrLf & vbCrLf & ListBox1.Items(i))
    5. End If
    6. Next

    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.