Dann musst Du eben ein ContextMenu anzeigen.
Wie das geht, dafür gibts genug Hilfen im Internet.
Ich gehe mal davon aus, das da ist eine RichTextBox und Du hast eine vernünftige Datengrundlage, mit der Du arbeitest. Und Du möchtest jetzt bei verschiedenen Positionen in der TextBox verschiedene Funktion (z.B. in der Tabelle eine neue Zeile) ermöglichen.
Wo Du dich befindest, während das ContextMenu sich öffnet, das kannst Du auf zwei Arten heraus finden:
Die Property MousePosition gibt dir die Position der Maus auf dem Bildschirm zurück. Mit PointToClient bekommst Du dann den Punkt relativ zum Control.
Zusätzlich gibt es noch die Methode GetCharIndexFromPosition, mit der Du den Index des Zeichens unter der Maus bekommst. Was Du mit diesem Index machen kannst, steht bei Option 2.
Die Property SelectionStart gibt dir den Anfang der markierten Auswahl als Zeichen-Index und SelectionLength. Wurde nichts ausgewählt, der Cursor sitzt aber irgendwo, ist die Länge 0.
Zusätzlich gibt es noch die Properts Lines und GetFirstCharIndexFromLine mit deren Hilfe Du dich von dem CharIndex des Cursors gut orientieren in der TextBox orientieren kannst.
Bedenke: Der CharIndex beginnt immer ganz links oben beim ersten Zeichen in der TextBox. Wenn Du drei Zeilen hast, die je 20 Zeichen lang sind, dann befindet sich das 10te Zeichen in Zeile 3 bei Index 49, da Nullbasiert.
Die Position zu verarbeiten, da ist es denke ich am einfachsten, wenn Du WordWrap auf false setzt und dann beim Füllen der TextBox dir merkst, wo genau z.B. die Tabelle beginnt und wie groß sie ist.
Dann kannst Du prüfen, ob in die Tabelle geklickt wurde um anschließend anhand der gewählten Optionen die Daten zu ändern und dann die TextBox neu zu füllen.
So gut kenne ich mich damit nicht aus.
Was Du auf jeden Fall machen kannst, ist für die entsprechende Auswahl (SelectionStart und SelectionLength) BackColor, ForeColor und Font fest legen. Damit hast Du dann schon viele Möglichkeiten.
Ob Du die Linien, wie Du sie im Bild hast, auf "normalem" Weg darstellen kannst, weiß ich nicht.
Im schlimmsten Fall musst Du sie selber zeichnen, das ist aber nicht weiter schwer, solange Du dir die Positionen der Inhalte merkst.
Oder Du schreibst Linien als Zeichen mit rein. Entsprechende Zeichen gibt's im UTF8-Format, die musst Du dann nur noch so stylen wie Du sie brauchst. Mit horizontalen Linien brauchst Du dann zwar eine eigene Zeile, aber das ist dann noch recht einfach.
Du hast auch gleichzeitig den Vorteil, dass Du das dargestellte als RTF-Datei speichern kannst, vorausgesetzt, Du zeichnest nichts selber.
Oder Du zeichnest komplett selber. Wenn das Dokument nur über entsprechende Menüs bearbeitbar ist, sollte das kein Problem sein, nur aufwendig.
Zum Zeichnen von Text (mit Font) und Linien gibt es entsprechende Methoden, die das für dich machen.
PS:
Oder Du suchst dir ein Control raus, was mehr kann. Auf die schnelle habe ich nur das gefunden, kostet aber Geld.
PPS:
Oder Du steigst auf WPF um :D
Die RichTextBox dort hat extrem viele Möglichkeiten bzw. endlos, weil Du einfach beliebige Controls inline darstellen kannst. Ich hab das auch schon genutzt, ich finde es nicht gerade übersichtlich zu nutzen, aber die Möglichkeiten sind enorm.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Palladin007 am .