| |
VB.NET - Ein- und UmsteigerRichtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 06:45 |
| Hallo zusammen,
ich habe eine RTB in der ich nach Schlagworten suche und diese einfärben lasse (rot&fett). Der restliche Text soll "unformatiert" also im Standard schwarz®ular erscheinen.
Mein Programm erstellt einen Text, und dank RTB hat der User noch mal die Chance zur Korrektur.
Das klappt soweit auch gut, nur eine Sache stört mich:
Nehmen wir mal an, ich will das Wort "Achtung" rot&fett markiert haben.
Das funktioniert mit folgendem Text ganz gut:
Dim rtbLines2() As String = WTEdit.RichTextBox1.Lines
Dim redi As Integer
For redi = 0 To rtbLines2.GetUpperBound(0)
If rtbLines2(redi).Contains("Achtung") Then
WTEdit.RichTextBox1.SelectionStart = _
WTEdit.RichTextBox1.GetFirstCharIndexFromLine(redi)
WTEdit.RichTextBox1.SelectionLength = rtbLines2(redi).Length
WTEdit.RichTextBox1.SelectionColor = Color.Red
WTEdit.RichTextBox1.SelectionFont = New Font( _
WTEdit.RichTextBox1.Font, FontStyle.Bold)
End If
Next
End Sub Soweit passt alles. Wenn ich nun aber z.B. unterhalb von "Achtung" weiterschreiben möchte, dann klicke ich hinter "Achtung", drücke ENTER um eine Zeile Platz zu schaffen und schreibe dort dann weiter.
Nur leider hat sich - da ich ja aus der "Achtung" Zeile komme - die rot&fett Formatierung auf meine neue Zeile vererbt.
Hier mal ein Beispiel
Kann ich das deaktivieren?
Oder kann ich den Code so ergänzen, dass neue Zeile = schwarz®ular?
Danke und viele Grüße
Beitrag wurde zuletzt am 26.09.16 um 06:46:13 editiert. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Manfred X | Datum: 26.09.16 12:08 |
| Hallo!
Du markierst eine ganze Zeile, nicht nur das Wort "Achtung".
Füge zunächst hinter "Achtung" ein zusätzliches Leerzeichen ein,
dessen Position "normal" formatiert ist.
Markiere danach nur das Wort "Achtung" (Selectionlength = 7).
Setze den Cursor hinter das eingefügte Leerzeichen (Selectionstart).
Übrigens in dem Fall wird nichts "vererbt", sondern es wird für
den RTF-Code (ROT) eine entsprechende Klammerung in den Text eingefügt.
Alles was direkt hinter dem Wort "Achtung" eingegeben wird,
liegt noch innerhalb des Klammerbereichs und übernimmt deshalb den
RTF-Code.
Beitrag wurde zuletzt am 26.09.16 um 12:11:35 editiert. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 13:02 |
| Hallo Manfred X, danke für den Tipp.
Ich muss mal ein paar Tests machen, ob ich das anwenden kann.
Ich hab mich hier blöd ausgedrückt, und auch das Beispiel war suboptimal.
Besser wäre die Aussage gewesen: Ich suche, ob das Wort ACHTUNG in einer Zeile steht, und färbe dann diese ganze Zeile ein. So wars eigentlich geplant. Nur würde ich wenn es irgendwie geht das nicht in die nächste Zeile schleppen wollen.
Eine Idee war, dass ich es vielleicht versuchen könnte, indem ich alle manuelle Eingaben auf eine gewisse Formatierung zwinge, aber da fand ich keinen Ansatz. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 15:03 |
| OK, ich habe mal die Länge auf exakt das Wort begrenzt, leider auch ohne Erfolg. Wenn ich direkt dahinter klicke, dann übernimmt es immer noch die Formatierung rot&fett.
Erst wenn ich ein Leerzeichen als Puffer dazwischen packe geht es.
Gibt es denn Alternativen, dass man z.B. der manuellen Eingaben fest eine Formatierung zuweist?
Oder eine Hintertür. Mein Programm schiebt Text in die RTB, wenn der dann aber drinne ist, dann sind nur noch manuelle Änderungen vorgesehen, es passiert nix mehr seitens des Programms.
Kann man sich das zu Nutze machen und vielleicht so umbauen, dass als letzter Schritt nach der Textübergabe, und vor dem manuellen Editieren die Farbe auf eine andere Farbe fest verankere?
Beitrag wurde zuletzt am 26.09.16 um 15:09:25 editiert. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: minimalist | Datum: 26.09.16 17:13 |
| Spawnie,
das mit der leertaste funktioniert vielleicht so:
Private Sub RichTextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles RichTextBox1.KeyDown
If e.KeyCode = Keys.Space Then
RichTextBox1.SelectionColor = Color.Black
End If
End Sub | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: minimalist | Datum: 26.09.16 17:47 |
| Spawnie,
geht vieleivht noch einfacher im klick event:
If RichTextBox1.SelectionLength = 0 Then
RichTextBox1.SelectionColor = Color.Black
End If
cheers | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: visualfx | Datum: 26.09.16 17:52 |
| Hallo,
der Vorschlag von minimalist ist schon mal sehr gut !!!
Ich würde allerdings nicht nur die Leertaste / Space abfragen, sondern bei jedem Tastendruck RichTextBox1.SelectionColor = Color.Black aufrufen, also wieder Schwarz einstellen.
Dann müßte sich die RichTextBox genau so verhalten wie Du es erwartest
Gruß, Stefan | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 18:40 |
| Wie sage ich aber rein sprachlich "egal was für ne Taste"?
Ich hab minimalists Vorschlag noch nicht ins Programm gepackt, aber rein von der Theorie her könnte es mir gefallen.
Bei Editieren klicke ich irgendwo in den Text und schreibe los. Also ist die Selektion = 0. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 18:49 |
| So, ich habe nun den letzten Code mal ausprobieren können.
Das geht schon sehr stark in die richtige Richtung, ein kleines Teilchen fehlt aber noch zum perfekten Glück, wobei ich aber nicht weiß, wie mans in den Griff kriegen kann.
Mein alter, vorhandener Text geht bis jeweils zur Zeilen - Zahl. Danach das ist neuer Text, einfach wildes Testen - Klimpern. Ich Klicke also in die Zeile ans Ende, tippe, und wie ihr seht: Außer dem ersten Buchstaben wird alles brav blau.
Nur der erste Buchstabe nicht. Wieso auch immer da die Regel keine Anwendung findet | |
"egal was für ne Taste" | | | Autor: visualfx | Datum: 26.09.16 18:56 |
| Hallo,
"egal was für ne Taste"
Private Sub RichTextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles _
RichTextBox1.KeyDown
RichTextBox1.SelectionColor = Color.Black
End Sub Gruß, Stefan
Beitrag wurde zuletzt am 26.09.16 um 18:57:32 editiert. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 19:39 |
| Yay, das funktioniert genau so wie ichs mir vorgestellt hab bisher. | |
Re: Richtextbox: Vererbung der Formatierung stört | | | Autor: Spawnie | Datum: 26.09.16 23:17 |
| So, ausführlich getestet.
Die Funktion nur noch blau zu schreiben ist zu 100% erfüllt.
Leider reagiert aber ein anderer Teil meines Programms sehr, sehr merkwürdig.
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles _
FTUndo.Click
If Me.RichTextBox1.CanUndo Then
Me.RichTextBox1.Undo()
End If
End Sub
Private Sub FTWdh_Click(sender As Object, e As EventArgs) Handles _
FTWdh.Click
If Me.RichTextBox1.CanRedo Then
Me.RichTextBox1.Redo()
End If
End Sub Meine Redo und Undo Buttons zicken ein wenig.
- Ich markiere Text1 & lösche ihn
- Ich markiere Text2 & lösche ihn
- Ich drücke "Undo"
Und nun wird es merkwürdig. Klick 1 auf Undo bringt den gelöschten Text2 zurück, nur halt in blau. Klick 2 macht garnix (sichtbares). Klick 3 macht den Text wieder schwarz, Klick 4 holt Text 1 zurück in blau, Klick 5 macht nix (sichtbares), Klick 6 macht den Text schwarz.
Vorher war es wirklich exakt wie es sein soll. 1 x Klick = 1 x rückgängig.
Ich hab aber beim besten Willen keinen Schimmer wo dieses unsinnige Verhalten her kommt? Wieso 3 x klicken und diese komische Abfolge?
Habt ihr eine Idee? | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|