RichTextBox - Nur eine bestimmte Schriftart, Farbe und Größe erlauben

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    RichTextBox - Nur eine bestimmte Schriftart, Farbe und Größe erlauben

    Hi,

    ich habe noch nicht so oft mit RichTextBoxen gearbeitet.
    Ich möchte dass in dem Control auch beim "hineinkopieren" von Texten die Schriftart, -farbe und -größe nicht geändert werden kann.
    Es gibt vom Programm aus den Text unterstrichen, fett und/oder kursiv darzustellen. Dies soll auch weiterhin möglich sein. Aber ich möchte halt die restlichen formatierungen unterbinden.
    Weiß wer wie das geht?

    Und erweitert... (wenn möglich) möchte ich, dass solche Formatierungen über das Programm, aber nicht durch das "hineinkopieren" vorgenommen werden können.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    In Change Event abfragen ob Text eingefügt, dann auf gewünschte Schrift/Farbe stellen.
    Definiere deine Schriftgrößse/Schriftname/Farbe als Konstante und weise werte an RTB Eigenschaften zu.
    Somit wird dein Text nur mit konstante Schriftgrößse/Schriftname/Farbe formatiert
    Blöde Frage... Aber wie kriege ich raus ob Text "eingefügt" wurde?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Das ermittelt ja nur ob Text vorhanden ist. Aber nicht ob er ber Copy-Paste eingefügt wurde. Vllt haben wir da gerade aneinander vorbeigeschrieben :D
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Da habe ich aber doch keine Unterscheidung ob der Text "geschrieben" wurde oder "eingefügt". Das muss ich ja ermitteln. Und in Folge auch nur diesen formatieren.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ich versuchs nochmal anders zu erklären. Ich glaube es ist noch nicht ganz verständlich was ich meine :P

    1. Per "Paste" darf nur die Standardschriftart verwendet werden
    2. Das Programm darf jedoch die Schriftart ändern

    Wenn ich den Keydown abfange ermittel ich ja (meines Wissens ^^) wenn jemand schreibt... Aber nicht wenn jemand etwas "Paste"t (ich schreibs mal englisch damit man mit dem Einfügen nicht missversteht was ich meine).

    Ich möchte auch nicht im Change Event einfach überall die Standardschrift drüber bügeln. Sondern nur wenn jemand etwas "Paste"t. Und dann auch nur eben diesen Text.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Man darf ja wiederum einfügen. Jedoch übernimmt der beim Einfügen ja die Schriftformatierung der Quelle. Und genau das soll unterbunden werden :P
    Oder was meinst du mit dem löschen?

    Also mein eigentliches Problem liegt darin herauszufinden OB ein Text eingefügt wurde und wenn ja... diesen (und nur diesen) zu selektieren um die Standardschriftart drüber zu jagen
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Unterbinde STRG+C und lege dir einen Button an, der nimmt den Text aus der Zwischenablage formiert diesen und fügt ihn zur Cursorposition ein.

    Tut exakt was du willst und der Rest dürfte noch veränderbar sein.

    //edit: Wenn du die Hotkeys STRG+C nicht unterbinden willst, dann musst du wohl oder übel den Rotz abfangen und ändern. Aber soweit ich weiß können Systemhotkeys nicht abgefangen werden. Alternative deaktiviere STRG+C und registriere dir ein Forminternen Hotkey mit STRG+C, ob das funktioniert kann ich dir nicht sagen. Ich würde meine erst genannte Variante verwenden.
    Manchmal sieht man ja den Wald vor lauter Bäumen nicht.. XD
    Nu muss ich nurnoch rausfinden wie ich Strg+C unterbinde ^^ Aber danke schonmal. Das war mal nen gescheiter Denkanstoß!!!
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Z.B. im Keydown-Event STRG+C abfangen und dann mit e.Cancel einfach ignorieren.

    Oder im Designer "ShortcutsEnabled" auf False setzen, aber welche SHortcuts dann noch deaktiviert werden kann ich dir nicht sagen.

    //edit: Tschuldige e.Cancel ist dort nicht verfügbar, versuche es so:

    VB.NET-Quellcode

    1. If e.KeyCode = Keys.C AndAlso e.Control Then
    2. e.Handled = False
    3. End If
    Da komm ich schon hinter :D

    AAABER!!! Wie formatiere ich einen Text in der Zwischenablage. Da ist der ja als String. Und nen String kann ich ja nicht anpassen. Oder denke ich falsch?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Wenn du den Text formatiert einfügen kannst, dann ist er natürlich mehr als ein String, der einfach nur den Text enthält.
    Du wirst ihn hinzufügen und dann in der Richtextbox anpassen müssen.
    Dazu kannst du entweder eine gesonderte Abfrage beim TextChanged die anspringt wenn du eine Variable z.B. Boolean änderst.
    Oder du nimmst eine zweite Richtextbox und nennst diese "ClipboardAktion", Visible auf False versteht sich.
    Dort einfügen, formatieren, in die Richtextbox einfügen.

    Es gibt viele Möglichkeiten, welche davon die gescheiteste ist kann ich dir nicht sagen. Mein Programmierstil ist leider nicht der beste.
    Also, ich habe nen Contextmenu erstellt und dort ne Funktion "Einfügen" erstellt. Dieses wird zwar nicht angezeigt... aber den Shortcut habsch daher XD Der überschreibt mir auch den normalen Strg+V Shortcut

    VB.NET-Quellcode

    1. Private Sub EinfügenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EinfügenToolStripMenuItem.Click
    2. TextBoxFuellen = True ' Nötig um ein Handle beim Lost und Gotfocus von der RichtTextbox abzufangen.
    3. Using RTF As New RichTextBox
    4. RTF.Paste()
    5. RTF.SelectAll()
    6. RTF.SelectionFont = New Font("Segoe UI", 8)
    7. RTF.SelectionColor = Color.Black
    8. Clipboard.SetText(RTF.Rtf)
    9. End Using
    10. Me.TextBox.SelectedRtf = Clipboard.GetText
    11. Me.TextBox.Focus() ' Nötig, damit der Gotfocus Handle nicht ausgelöst wird.
    12. TextBoxFuellen = False
    13. End Sub


    Nicht ganz schön. Aber geht XD
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D