Selektierung von RTB für UserControl übernehmen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Selektierung von RTB für UserControl übernehmen

    Hallo.

    Ist es möglich das Auswählen von RichTextBoxen (und TextBoxen auch) für eigene Controls zu übernehmen (ohne alles von 0 neu zu schreiben).
    Gemeint ist folgendes: Wenn man Text mit der Maus auswählt (irgendwo klicken und halten, ziehen, auslassen), dann werden die dazwischenliegenden Zeichen markiert. Dann gibt's Drag 'n Drop zum Verschieben von Textteilen, Ersetzen von markiertem Text beim Tippen, etc.
    Das ist beim Editor hier im Forum genau so (siehe Screenshot).
    Gibt es die Möglichkeit dieses Verhalten für ein UserControl zu übernehmen?
    Mein Problem ist nämlich: Ich bräuchte vom Prinzip her nur eine RichTextBox, aber die Möglichkeit den Text selbst zu zeichnen.
    Das Paint-Event einer RichTextBox zu überschreiben bringt folgendes Problem:
    *Der gezeichnete Text passt nicht mit der Auswahl zusammen (siehe Screenshot 2).
    *Ich müsste von Hand die Abmessungen der Auswahlen ausrechnen lassen und blaue Rechtecke zeichnen lassen.
    *Es gibt generell Probleme mit dem Neuzeichen (anscheinend werden manche Bereiche nicht invalidiert).

    Also: Gibt es eine bessere Möglichkeit und wenn ja, wie?
    Bilder
    • Unbenannt.png

      16,24 kB, 987×116, 131 mal angesehen
    • Unbenannt2.png

      22,56 kB, 574×189, 144 mal angesehen
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Meinst Du so etwas:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim txt As String = RichTextBox1.SelectedText
    3. RichTextBox2.SelectedText = txt
    4. End Sub
    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!
    Es geht mir darum die Funktionen einer RichTextBox nachzumachen.
    Also wenn ich auf meinem UserControl die Maustaste drücke und halte, dann woanders hinfahre und wieder loslasse, dann soll der Text zwischen den beiden Punkten markiert werden.
    Und wenn ich dann etwas schreibe soll der markierte Text ersetzt werden und der weitere Text an dieser Stelle eingefügt werden.

    Das würde ich mit viel Zeit und Mühe vermutlich auch so hinbekommen, aber mir wäre es schon recht die von Microsoft vorgefertigten Sachen zu verwenden.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Ich bräuchte vom Prinzip her nur eine RichTextBox, aber die Möglichkeit den Text selbst zu zeichnen.

    Das ist glaub sehr mühsam. Da musste richtig positionieren, bei TextÄnderungen den richtigen Bereich invalidieren, den richtigen Font, Zeil-Umbruch, SelectionColor, und die Textmarke auch blinken lassen - was ist mit Undo-Funktion?
    Und so bunten Richtext darstellen, das ist nochmal son Thema.

    Warum kannst du nicht einfach Richtextbox nehmen?
    Und so bunten Richtext darstellen, das ist nochmal son Thema.

    Genau das ist es.
    Ich bräuchte ein Textverarbeitungscontrol, mit dem ich ein Syntax Highlighting machen kann.
    Die Logik hinter dem Highlighting und dem Zeichnen des Textes selbst habe ich bereits. Das Control ist auch bereits in Verwendung. Aber ich muss immer wenn ich etwas am Text ändern will zu einer (Rich)TextBox wechseln, dort schreiben (ohne Syntax Highlighting) und dann wieder zurück zum UserControl wechseln. Und das finde ich umständlich.

    Das Syntaxhighlighting Funktioniert aber nicht nach dem Prinzip wie man es von RichTextBoxen kennt, sondern nach einer etwas einfacheren (und scheinbar nicht unperformanten) Methode.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Hat niemand mehr Tipps?

    Sorry Niko, aber ich habe immer noch nicht verstanden warum Du nichtg eine Richtextbox nehmen kannst /willst. Die RTB selber unterstützt ja kein Syntax Highlighting, sondern gibt Dir nur die Möglichkeit bestimmte Textstellen formatiert (font, color, style) auszugeben, - und noch dazu nicht gerade performant.

    Jedes Syntax-Highlighting muss also eh auf die RTB draufgepflanzt werden. Was also möchtest Du bitte noch selber zeichen ?

    Ausser der RTb kannst Du natürlich auch auf die Scintilla-Engine gehen: nur auch hier gilt, was willst Du eigentlich funktional erreichen ??
    Ich möchte das erreichen, was ich in Post #6 geschrieben habe.
    Dass mit RichTextBoxen nur farbliche Darstellung verschiedener Textsegmente möglich ist (was ja im Grunde genommen auch für Syntax Highlighting verwendet werden kann) habe ich gesehen.
    Da es mir allerdings zu umständlich ist mit LockHandle (bin mir da nicht mehr sicher) die RichTextBox zu sperren, dann per RegEx die Matches rauszusuchen und diese dann zu färben habe ich mir da was einfacheres zurechtgebastelt (Siehe Screenshot).

    Allerdings habe ich wie erwähnt das Problem, dass ich so nicht effektiv Code schreiben kann, weil ich Textstellen nicht markieren kann, etc.

    Edit: Auch farbliche Hinterlegung (wie man sie vom Einzelschrittdebugging im VS kennt) ist so möglich.
    Bilder
    • Unbenannt.png

      14,35 kB, 327×475, 114 mal angesehen
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

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

    Jein. Er ist bei ILSpy dabei, wo ich ihn mir angeschaut habe.
    Allerdings ist es mir doch etwas komisch vorgekommen, als ich beim Probieren auf einmal Verweise auf ein paar Dlls hinzufügen musste und in einem Media Namespace mit einer MediaBrush Klasse gelandet bin.
    Und da bin ich ausgestiegen.

    Würde es Dir was ausmachen mir die SourceCode Dateien per PN zuzuschicken, denn ich bin bei Codeproject nicht registriert und nur deswegen einen Account anzulegen wäre nicht sonderlich produktiv.

    Aber gefunden habe ich die Seite auch schon mal.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ok, hab einen Account angelegt und die Sourcecode Dateien heruntergeladen.
    Hab's jetzt hinbekommen (war eigentlich gar keine Hexerei).
    Jetzt muss ich nur noch nachlesen in wie fern ich den Editor verwenden darf.

    Danke an ErfinderDesRades für die Motivation ^^
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils