Flowdocument und return

  • WPF
  • .NET 5–6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Thomas2705.

    Flowdocument und return

    Guten Tag
    Der Inhalt einer Datenbank wird in eine schreibgeschützte RichtextBox geladen. Durch ein Ereignis wird der Schreibschutz aufgehoben und der Inhalt ist beschreib- bzw. veränderbar.
    Setze ich allerdings den Cursor in die RTB und betätige die Enter Taste wird der sich darin befindliche Inhalt gelöscht. Erst beim dann neu eingegebenen Text erfolgt ein Zeilenumbruch beim betätigen der Enter Taste.
    Es wäre aber sehr angenehm wenn der ursprüngliche Inhalt erhalten bliebe.

    XML-Quellcode

    1. <RichTextBox
    2. x:Name="agenda_hinweise"
    3. AcceptsReturn="True"
    4. AcceptsTab="True"
    5. >
    6. <FlowDocument>
    7. <Paragraph Margin="10">
    8. <Run Text="{Binding irgendein Text}" />
    9. </Paragraph>
    10. </FlowDocument>
    11. </RichTextBox>


    Wie geht das?
    Um zu verhindern, dass der Inhalt einer RichtextBox beim Drücken der Enter-Taste gelöscht wird, können wir das KeyDown-Ereignis der RichtextBox verwenden. Hierbei wird geprüft, ob die Enter-Taste gedrückt wurde und in diesem Fall wird das Löschen des Inhalts verhindert und stattdessen wird ein Zeilenumbruch hinzugefügt.

    Hier ist der Code, den du in das KeyDown-Ereignis der RichtextBox einfügen kannst:

    C#-Quellcode

    1. private void agenda_hinweise_KeyDown(object sender, KeyEventArgs e)
    2. {
    3. if (e.Key == Key.Enter)
    4. {
    5. // Verhindert das Löschen des Inhalts bei Betätigung der Enter-Taste
    6. e.Handled = true;
    7. // Fügt stattdessen einen Zeilenumbruch hinzu
    8. TextPointer caretPos = agenda_hinweise.CaretPosition;
    9. caretPos.InsertTextInRun(Environment.NewLine);
    10. agenda_hinweise.CaretPosition = caretPos.GetNextInsertionPosition(LogicalDirection.Forward);
    11. }
    12. }


    Um das Ereignis zu aktivieren, fügst du einfach den folgenden Code in den XAML-Code deiner RichtextBox ein:

    XML-Quellcode

    1. <RichTextBox x:Name="agenda_hinweise" AcceptsReturn="True" AcceptsTab="True" KeyDown="agenda_hinweise_KeyDown">


    Mit diesem Code wird der Inhalt der RichtextBox beim Drücken der Enter-Taste nicht mehr gelöscht und stattdessen wird ein Zeilenumbruch hinzugefügt.
    Nein es funktioniert nicht:

    VB.NET-Quellcode

    1. Private Sub agenda_hinweise_KeyDown(sender As Object, e As KeyEventArgs)
    2. Dim caretposition As TextPointer = agenda_hinweise.CaretPosition
    3. Try
    4. If e.Key = Key.Enter Then
    5. 'Verhindert das Löschen bei Betätigung der Enter Taste
    6. e.Handled = True
    7. 'Fügt Zeilenumbruch ein
    8. caretposition.InsertTextInRun(Environment.NewLine)
    9. agenda_hinweise.CaretPosition = caretposition.GetNextInsertionPosition(LogicalDirection.Forward)
    10. End If


    Der usprüngliche Eintrag wird beim Betätigen der Enter Taste überschrieben bzw,. gelöscht. Das soll so aber nicht sein.