Wieso schafft VB.Net kein ordentliches Syntaxhighlight?

  • VB.NET

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

    Wieso schafft VB.Net kein ordentliches Syntaxhighlight?

    Hallo an alle, ich habe öfter schon versucht in VB.net und einer rtb eine syntaxhighlight zu realisieren.

    Einige von euch werden dies sicher auch schon hin bekommen haben, und dies funktioniert ja auch mit regex, dann Text Wählen und dann einfanden.

    Ja wenn man zwei rtbs hat, eine die dem Nutzer angezeigt bekommt und eine im Hintergrund so das der Text an die im Hintergrund geschickt wird, dann von der Anwendung verarbeitet wird und dann als rtf Format zurück an die sehen rtb, so das der Nutzer vom selektieren und einfärben nichts mitbekommt.

    Dich sobald der Text in der rtb etwas größer wird, ca ab 100 Zeilen, fängt die Anwendung am zu ruckeln. Dann machte auch kein Spaß mehr etwas ein zu tippen.

    Kann sowas nicht ruckelfrei funktionieren?

    Hat jemand da Lösungsansätze?

    Klar ich kann das verarbeiten in einen extra thread laufen lassen. Tut trotzdem nichts zur Sache das man dann beim Nutzer trotzdem das hackilige einfärben sehen würde auch wenn die Anwendung selber nicht ruckelt.

    Eine Lösung muss es ja geben, oder ist die performance von .net einfach zu langsam? Oder meine Vorgehensweise nicht optimal?

    MFG.

    SynapticOptics schrieb:

    Lösungsansätze
    Gib der RTB zunächst im Hintergrund alle erforderlichen Fonts. Teste an einem unformatierten und einem formatierten Text, wie sich das im .RichText der RTB manifestiert.
    Wenn Du dann im Hintergrund im .RichText nicht aber im .Text arbeitest, sollte das schneller gehen.
    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!
    Mache ich ja schon :D sobald die rtb im vordergrund der text geändert wird, schickt der diesen(unformatiert/also nur den text) an die im hintergrund, dann wird diese im hintergrund verarbeitet und als rtf format wieder an die im vordergrund geschickt.

    Ich bin jedoch am überlegen ob ich das verfahren nicht dahingehend ändere in dem ich einfach dort wo gerade der selector ist 10-20 vor und danach einfach abarbeiten lasse so das die schleife weniger zu arbeiten hat..... :whistling: sollte an sich gehen sofern es keine variablen oder funktionen gibt die länger sind als 40 zeichen, da sonst nicht komplett eingefärbt werden kann, welcher mensch schreibt aber funktionen oder variablen mit mehr als 40 zeichen :D

    musste ich mal ausprobieren, wenns klappt melde ich mich natürlich.
    @SynapticOptics Gibst Du jedes Mal den schon formatierten Text als unformatiert in den Hintergrund? Das ist natürlich suboptimal.
    Ein fertig formatierter Text darf nicht bei Änderung der nächsten Zeile wieder formatiert werden!
    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!

    RodFromGermany schrieb:

    @SynapticOptics Gibst Du jedes Mal den schon formatierten Text als unformatiert in den Hintergrund? Das ist natürlich suboptimal.
    Ein fertig formatierter Text darf nicht bei Änderung der nächsten Zeile wieder formatiert werden!


    Nein hatte ich ja erwähnt

    SynapticOptics schrieb:

    Mache ich ja schon sobald die rtb im vordergrund der text geändert wird, schickt der diesen(unformatiert/also nur den text) an die im hintergrund,


    Habe das auch mit dem selector und den 20 zeichen davor probiert, klappt zwar an sich, aber regex findet denn z.B. einen string wenn davor steht

    Quellcode

    1. "
    2. Dim test As String "Test"

    in dem fall färbt der dann

    Quellcode

    1. "
    2. Dim test As String "


    diese methode klappt also auch nicht :/

    @Bluespide ich werde mir das mal anschauen, danke :thumbup:

    SynapticOptics schrieb:

    hatte ich ja erwähnt
    Jou.
    Und diese Herangehensweise ist falsch.
    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!
    Mit Bordmitteln und Richtextbox geht das nicht, weil Rtb sich immer aktualisiert, und das ist bei viel text mit viel bunt ein fürchterbares Geklapper.
    Man kann mit Pin-Invoke die Auto-Aktualisierung aussetzen, dann ist Rtb für sowas leidlich brauchbar.
    Aber BlueSpides Empfehlung ist letztendlich das einfachste, auch wenn man sich gewaltig einfuchsen muss.
    Ja das stimmt, ich hatte auch mal vor den eingegebenen Code direkt mit Regex und Replace in ein RTF format zu verarbeiten, aber die rtb setzt die farben komischerweise automatisch wieder zurück.

    Naja ich werde mich mal weiter umschauen, danke trotzdem :thumbsup:

    Achja und @Bluespide dein Tipp mit FastColoredTextBox ist gut, aber die methode die er dort anwendet ist ja schon extrem komplex :) aber anscheinend gibt es keinen anderen weg als die methode die in FastColoredTextBox eingesetzt wird.

    Dachte es wäre wesentlich simpler, da habe ich mich wohl getäuscht :whistling:

    SynapticOptics schrieb:

    aber die rtb setzt die farben komischerweise automatisch wieder zurück.
    Das ist möglicherweise falsch, poste mal ein Beispiel dafür.
    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!