Autor |
Beitrag |
Garzec
      
Beiträge: 29
|
Verfasst: Mo 13.06.16 13:18
Hi,
ich versuche in einem Projekt das optische Hervorheben von Code in einer Richtextbox nachzubauen. Deshalb wollte ich fragen, ob mir jemand sagen kann, ob es überhaupt möglich ist und wie es funktioniert, bzw. nach was man googlen kann.
Ich habe eine Richtextbox, schreibe meinen Text und kann über den Button dann den markierten Abschnitt in eine Box packen.
C#-Quelltext
Danke 
|
|
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Mo 13.06.16 13:36
Hi,
du hast uns schonmal beschrieben, was du machen willst. Du hast uns aber nicht genau gesagt, an welcher Stelle/welches Problem du dabei hast?
Zitat: | Ich habe eine Richtextbox, schreibe meinen Text und kann über den Button dann den markierten Abschnitt in eine Box packen. |
Und was fehlt dir dabei noch? Etwa die Änderung des markierten Textes(zB kursiv geschrieben, farblich markiert) oder was genau?
Mehr Infos bitte
Gruß Julian
EDIT: Falls du noch gar nicht weiß, wie du anfangen sollst: Es gibt mehrere Herangehensweisen. Willst du zum Beispiel, dass der Text zwischen den Tags erst nach Bestätigung des User (zB durch einen Button-Click) geändert wird, so musst du nur im entsprechenden Click-Event den Text nach den Tags durchsuchen. Willst du, dass er sich nach der Eingabe des Textes ändert (also unmittelbar), dann verwende bei deiner richTextBox das TextChanged-Event und prüfe, ob mit der letzten Eingabe ein Tag gebildet wurde und verarbeite es entsprechend. Aber am besten gibst du uns mehr Infos 
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Mo 13.06.16 13:44
Einfach die grafische Hervorhebung. Also das in dem Feld ein Rechteck gezeichnet wird und der Code darin dargestellt wird.
|
|
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Mo 13.06.16 14:50
Also wenn du, bereits den Text daraus extrahiert hast, dann musst du nur noch:
1. einen Zeilenumbruch vor dem Tag einfügen
2. deinen Text einfügen (nachdem du das komplette Tag-Konstrukt aus der richTextBox entfernt hast)
3. diesen Text markieren und dabei BackColor, SchriftArt usw. ändern (wenn du die ganze Zeile markiert haben willst, musst du zusätzlich noch bis zum Zeilenende Leerzeichen einfügen)
4. erneuter Zeilenumbruch und weiter den Text analysieren
Vielleicht hilft dir das ja weiter, ansonsten kannst du natürlich weitere Fragen stellen.
Gruß Julian
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.06.16 02:50
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Di 14.06.16 09:25
Hi, danke für eure Hilfe. Ich bin mir nicht ganz sicher ob ich mich vielleicht falsch ausgedrückt habe. Ich möchte nicht die Syntax hervorheben. Mir geht es nur um den reinen Container innerhalb einer Richtextbox. Stellen, die man also hervorheben möchte, können über einen Button in einen Container gepackt werden, der sich dann dynamisch der benötigten Größe anpasst und sich in der Richtextbox abbildet.
|
|
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Di 14.06.16 09:28
Moin,
Einen ähnlichen Effekt würdest du ja durch Highlighting (der ganzen Zeile) bekommen. Wie man einen selbst-gezeichneten Container in eine richTextBox kriegt, weiß ich nicht. Was hast du denn schon ausprobiert?
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Di 14.06.16 10:30
Ich habe versucht das Ganze mal nachzubauen.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| private void btnQuellcode_Click(object sender, EventArgs e) { string markierterText = edtTextfeldEintraege.SelectedText; int linienCountFensterNormal = 87; int linienCountFensterMaximiert = 248; string strichKette = ""; if (WindowState == FormWindowState.Normal) { for (int i = 0; i < linienCountFensterNormal; i++) { strichKette += "-"; } } else if (WindowState == FormWindowState.Maximized) { for (int i = 0; i < linienCountFensterMaximiert; i++) { strichKette += "-"; } } strichKette += Environment.NewLine; string neuerString = "\r\n\r\n" + markierterText.Insert(0,strichKette) + Environment.NewLine + strichKette + "\r\n\r\n"; edtTextfeldEintraege.SelectedText = neuerString; } |
Aber die Striche sehen natürlich nicht so umwerfend aus, daher fragte ich nach der Container Möglichkeit.
Zuletzt bearbeitet von Garzec am Di 14.06.16 11:41, insgesamt 2-mal bearbeitet
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 14.06.16 10:48
|
|
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Di 14.06.16 10:49
Garzec hat folgendes geschrieben : | Aber die Striche sehen natürlich nicht so umwerfend aus, daher fragte ich nach der Container Möglichkeit. |
Versuche doch, anstatt die Striche einzufügen, einfach die BackColor der Selection zu ändern. Dann hättest du ja wie eine Art Box
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Di 14.06.16 11:12
Ja, hatte ich mir auch überlegt, aber da ich ja wie in Word die Hintergrundfarben etc. ändern kann, wäre das vielleicht unpassend, sobald man die gleiche Farbe für eine normale Textformatierung wählt :S
|
|
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Di 14.06.16 12:37
Zitat: | da ich ja wie in Word die Hintergrundfarben etc. ändern kann, wäre das vielleicht unpassend, sobald man die gleiche Farbe für eine normale Textformatierung wählt |
Ist doch egal, weil für deinen Container müsstest du ja auch eine Hintergrundfarbe festlegen.
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Di 14.06.16 12:54
Da hast du Recht. Ich probiere mal deine Idee aus 
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Di 14.06.16 15:23
Dazu habe ich aber mal eine Frage, wie spreche ich denn in der Richtextbox eine ganze Zeile an?
Natürlich kann ich über SelectionColor etc. die Farbe bestimmen, aber diese geht ja nur über den Text und nicht über die Zeile.
Weiß das jemand?
|
|
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Di 14.06.16 15:26
Ich hätte jetzt einfach den Rest der Zeile mit Leerzeichen aufgefüllt. Dazu musst du ja nur wissen, wieviele Zeichen in eine Zeile deiner Box passen.
|
|
Garzec 
      
Beiträge: 29
|
Verfasst: Di 14.06.16 15:33
Ne, das hatte ich schon probiert, die Zeichen sind ja alle unterschiedlich groß, aus dem Grund geht es dann hinten immer unterschiedlich auf :S
Naja.. vielleicht kann man es auch einfach nicht umsetzen und es funktioniert nur hier im Web.
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 14.06.16 15:43
Code würde ich generell (so wie auch hier im Forum) nur mit einer nichtproportionalen Schriftart (z.B. "Courier New" darstellen)...
|
|