Richtextbox selection bold und nicht bold

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Für die Auszeichnung eines selectierten Abschnittes musstehalt einen komplett neuen Font an Selectionfont zuweisen.
    Wenn der bis auf eine Eigenschaft identisch sein soll mittm bestehenden SelectionFont, so musste letzteren halt abrufen, und die gewünschte property ändern.
    @EDR: genau.
    @Kulki-See: Mit ein bisschen Erfahrung kannst Du die Schriftart in einer RTB überlappend ändern.
    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!
    Der Gedanke (+Code) von haiyyu ist schon richtig, die Durchführung aber etwas tricky.
    Nimmt man Richtextbox1.Font, ändert man den Font der ganzen Box.
    Nimmt man hingegen Richtextbox1.SelectionFont, ändert man den ausgewählten Text. Aber durch die Zuweisung eines neuen Font-Objekts wird die gesamte Auswahl durch EINEN neuen Style ersetzt.

    Bleibt eigentlich nur mehr die buchstabenweise Änderung.

    VB.NET-Quellcode

    1. Private Sub ChangeFontStyle(RichTextBox As RichTextBox, FontStyle As FontStyle)
    2. RichTextBox1.SuspendLayout()
    3. Dim selectionStart = RichTextBox.SelectionStart
    4. Dim selectionLength = RichTextBox.SelectionLength
    5. Dim selectionEnd = selectionStart + selectionLength - 1
    6. For pos = selectionStart To selectionEnd
    7. RichTextBox.Select(pos, 1)
    8. RichTextBox.SelectionFont = New Font(RichTextBox.SelectionFont, RichTextBox.SelectionFont.Style Xor FontStyle)
    9. Next
    10. RichTextBox.Select(selectionStart, selectionLength)
    11. RichTextBox1.ResumeLayout()
    12. End Sub


    Anwendung: ChangeFontStyle(RichTextBox1, FontStyle.Bold)
    Geändert wird der ausgewählte Text in den gewünschten Style

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ () aus folgendem Grund: -1 hinzugefügt ;-)

    Fällt mir auch nix anneres ein, als Buchstabenweise.

    Das wird aber sehr ungemütlich, denn drucken zumindest mit dem PrintDocument ist ein ownerDrawing-Vorgang, und du mußt die Abmaße jedes Zeichens einzeln ermitteln, mittels Graphics.MeasureCharacterRange() uff, uff.

    Weiters mußt du dich um Zeilvorschübe und SeitenVorschübe selber kümmern, also wirklich was anneres als trivial.

    Für normalen fließtext habichjamal was gebastelt zum Drucken, aber halt vorrausgesetzt, dass nur ein Font Verwendung findet: Mehrseitigen Text drucken
    kleiner tippfehler, es heißt: MeasureCharacterRanges

    Darunter findstes im ObjectBrowser und auf msdn auch was, oder vlt. hat auch jmd anners lust, das eingehender zu erläutern - ich muß gestehen: ich bin zu faul dafür.

    Oder es gibt fertige Controls, die sowas drauf haben.
    Wenn Du die gesamte RTB auf einen bestimmten Style (bold, regular, italic) setzen willst ohne gleichuteitg die anderen Styles zu zerstören ist der Ansatz von Kurt vermutlich der simpelste (wenn man nicht im direkt rtf-Cdode rumoperieren möchte).

    Möchtest Du allerdings nur bestimmte Markierungen (ent-)bolden , so kannst Du ja Kurts Lösung abwandeln , wesentlich ist hier nur das XOR mit dem entsprechenden Style.

    Zum Drucken der RTB mit verschiedensten Styles kannst Du die einfach das Programm "WordPad" bemühen:
    - RTB in ein File abspeichern per Richtextbox.SaveFile

    Durcken des Files per Wordpad:

    VB.NET-Quellcode

    1. Dim p As New Process
    2. p.StartInfo.FileName = "WordPad.exe"
    3. p.StartInfo.Verb = "Open"
    4. p.StartInfo.Arguments = "/p test.rtf"
    5. p.Start()