VB.net: RTB Icons werden erst sichtbar nachdem Text eingelesen ist

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Spawnie.

    VB.net: RTB Icons werden erst sichtbar nachdem Text eingelesen ist

    Hallo zusammen,

    bei mir hat sich mal wieder eine neue Fragestellung aufgetan. Wie immer vorweg, ich bin kein Profi sondern exmperimentiere selbst immer wieder rum bis es klappt. Daher sind meine Lösungen vielleicht nicht immer sauber, aber am Ende tut es eben das was ich wollte. Meistens jedenfalls. Außerdem kanns sein, dass ich bei den Tipps nicht direkt mitkomme, daher schon mal ein SORRY an dieser Stelle.

    Ok, um was geht es nun...
    Ich habe eine Forms Anwendung die Text in einer Listbox generiert, verändert, ergänzt etc.
    Eine LB habe ich deswegen genommen, weil das Handling vom Text für mich super ist. Zeilenbasiert, was einmal steht bleibt stehen usw. Zudem ist es nicht mal schlecht, dass man so von Werk aus den Text nicht befummeln kann, quasi als Schutz gegen versehentliche Änderungen.

    Nun kam mir irgendwann die Idee: Naja Schutz ist ok, aber ein externer Editor wäre doch ganz cool für den Fall der Fälle. Und da bietet sich eine Richtextbox eben an.
    Also habe ich einen "Editieren" Button eingefügt, eine neue Form und beim Click übergebe ich den Inhalt der LB in die RTB der neuen Form.
    Dazu ein paar Knöpfchen wie "Abbrechen" falls ich es mir überlege, "Anwenden" um den Inhalt zurück in die LB aus der ersten Form zu schieben, "Undo" und Redo". Alles nichts wildes.

    Soweit klappt alles super mit meinem Dummytexten. Nun habe ich aber mal die richtigen Texte genommen, die etwas länger sein können.
    Auch hier klappt alles, aber das Handling ist nimmer so schön. Ich habe kein richtiges Problem sondern eher ein Problemchen optischer Natur.
    Wenn ich meinen Editieren Button klicke geht die 2. Form auf. Man sieht wie der Text in die RTB flutscht über einige Sekunden hinweg - der Scrollbalken verändert die Größe. Das ist ja noch ok.
    Aber alle Buttons wie "Anwenden" / "Abbrechen" / "Undo" / "Redo" sind erst mal nicht sichtbar sondern erscheinen erst wenn der Einleseprozess rum ist.

    Wie gesagt, es ist ein rein optisches Problem.
    Mir macht die Wartezeit von 5 oder 10 Sekunden nix aus, jedes Programm braucht seine Zeit zum arbeiten.
    Was mich optisch stört ist die Tatsache, dass die Buttons nicht sichtbar sind so lange der Text lädt.
    Kann ich da irgendwie die Priorisierung im Aufbau ändern, so dass erst die äußere Form mit den Buttons und dann der Text geladen wird?

    Danke schon mal und viele Grüße
    Hi @Spawnie

    Klar geht das. Du darfst halt erst als letztes die RTB mit Text befüllen.

    Du darfst auch gerne mal zeigen, wie du das bisher machst ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Spawnie Vielleicht ist es sinnvoll, die RTB nach Befüllung mit Icons und Text einfach mal upzudaten, wenn Du danach noch Zeit brauchst, bis die GUI allein dafür Zeit findet:

    VB.NET-Quellcode

    1. RTB.Update()
    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!
    Ich hatte in nem anderen Thread was in der Art aufgeschnappt und einfach mal probiert: Augenscheinlich hilft es :P
    Ob es auch sauber und ordentlich ist... wie gesagt, ich mach das - nennen wirs mal "ergebnisorientiert" :D

    Per Buttonclick gehe ich ja in die zweite Form, und hab dort einfach mal als erstes ein

    VB.NET-Quellcode

    1. Me.Refresh()


    eingefügt. Und nun habe ich direkt meine Icons. Wie gesagt, es ist ja ok das der Prozess bissl dauert, nur sah es halt doof aus.
    Ist das per Refresh soweit technisch in Ordnung?

    Noch mal kurz zum Ablauf: Ich habe nen recht langen Text in meiner LB sicher verwahrt. Wenns doch editiert werden soll dann gehe ich per Button in die zweite Form und übergebe den ganzen Inhalt an die RTB. In der Form habe ich neben der RTB nur 4 Buttons
    - Anwenden --> Schickt das ganze wieder in die LB meines Hauptfensters
    - Abbrechen --> Keine Veränderungen, ab ins Hauptfenster
    - Undo --> eh klar
    - Redo --> Undo nur andersrum
    Und eben die 4 Buttons waren nicht da wenn die neue Form aufpoppt, stattdessen waren da weiße Flecken auf der "zartgrauen" Form (oder wie auch immer man das nennen mag).
    Man siehts auch schön "rattern" wie sich die Box füllt, da sich ja die Größe vom Knopf der Scrollbar ändert. Und ganz am Ende kamen dann die Buttons auch richtig auf die Form.

    Nun schauts aber eigentlich gut aus.
    @Spawnie Refresh() ist in Ordnung.
    Du solltest mal prüfen, was in Deinem Code alles so passiert, wenn Du die neue Form aufmachst.
    Du scheinst ja Gigabytes aus einer Datenbank umzuschaufeln oder so.
    Was passiert da?
    Muss das alles überhaupt passieren?
    Muss es genau dann passieren??
    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!

    Spawnie schrieb:

    zeilenweise die LB in die RTB zu schieben
    Poste mal Deinen Code.
    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!

    Spawnie schrieb:

    Form2.Show()
    Wir programmieren mit VB.NET, nicht aber VB6.
    Lerne, was Instanzen sind.
    Gugst Du hier.
    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!