String Selection ohne Focus

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    String Selection ohne Focus

    Hi,

    ich muss ein bissl ausholen, um mein Problem zu beschreiben. Ich hoffe, ihr habt Geduld. :)

    Ich führe eine Log Datei, die ich zeilenweise in einer einspaltigen DatagridView anzeige. Es können Tausende von Zeilen anfallen.

    Diese Log Datei will ich natürlich nicht "durchlesen", sondern üblicherweise suche ich nach bestimmten Strings und zeige dann die gefundenen Zeilen nacheinander an. Das kann man sehr einfach kodieren.

    Das Problem ist aber, dass es schwer zu sehen ist, WO das Suchargument in der Zeile gefunden wurde. Die einzelnen Zeilen können mehr als 200 Bytes lang werden und enthalten zudem oft "kryptische" Texte.

    Ich habe deshalb ein "Found" Feld befüllt. Da sieht man das Suchargument und die "Umgebung" (30 Bytes vorher und 30 Bytes nachher). Leider ist selbst dieses Found Feld nicht so einfach lesbar ... vor allem weil der String auch am Anfang oder am Ende gefunden werden kann. Ich habe deshalb das Search Argument im Found Feld "selektiert", dann erscheint es blau hinterlegt. Jetzt ist die Sache gut lesbar. (s. Anhang)

    VB.NET-Quellcode

    1. txtFound.Text = strHeader & txtSearch.Text & strTrailer
    2. txtFound.Select(strHeader.Length, txtSearch.Text.Length)
    3. txtFound.Focus()


    Das funktioniert soweit so gut. Aber es gibt ein Problem:

    Sobald sich txtSearch.Text ändert, wird die Suche sofort ausgeführt. Man kann also während der Eingabe eines Suchstrings immer gleich die erste gefundene Zeile sehen. Damit erkennt man insbesondere, ob ein Suchargument nicht mehr gefunden wird.

    Durch das txtFound.focus() verliert die Eingabebox txtSearch aber den Focus. Damit kann ich in das Eingabefeld nicht "flüssig" schreiben, weil der Cursor ständig wegspringt. Das macht die Sache extrem unhandlich.

    Wenn ich txtFound.focus() aber weglasse, dann behält zwar das Eingabefeld den Focus aber jetzt wird die blau hinterlegte "Selection" nicht mehr angezeigt, weil txtFound keinen Fokus hat.

    Das ist mein Problem: wie kann ich den Focus auf txtSearch belassen und trotzdem den "Found String" mit farbig hinterlegtem Suchargument anzeigen.

    Der Found String muss natürlich keine TextBox sein ... es kann sich um ein geeignetes anderes Control handeln, etwa ein Label. Aber auch nach langem Überlegen ist mir da nix Gescheites eingefallen.

    Ich hoffe, ich habe mein Problem verständlich machen können. Hat jemand bessere Ideen ?

    LG
    Peter
    Bilder
    • s 2021-05-24 08-10-502.jpg

      34,19 kB, 847×184, 43 mal angesehen

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

    @Peter329 Mach aus der TextBox txtFound eine RichTextBox, dort kannst Du ohne den Focus setzen zu müssen den Text beliebig bunt machen.
    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!
    Schalte bei der TextBox HideSelection auf False.
    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.