Wir verwenden RichTextBox, um Text anzuzeigen. Wir haben Probleme mit geschützten Text rückgängig zu machen.undo/redo mit geschütztem Text in RichTextBox
Hier ist der Workflow, normalerweise haben wir reinen Text und in diesem Fall funktioniert das Rückgängig/Wiederholen perfekt. gelegentlich müssen wir bestimmten Text als "Geschützt" markieren. wir tun, um die Validierung und wandeln die Rtf on the fly und gehen Sie wie folgt es wieder auf das RTB:
m_rtbText.Rtf = sRtf
das Problem nach dem Schritt über dieser Linie ist, die
m_rtbText.CanUndo
Eigenschaft wird intern auf "False" gesetzt, haben wir alle Schritte zum Rückgängigmachen verloren. Um Ihnen ein Beispiel zu geben, ist hier, wie es vor der Validierung aussieht:
\cf1\i0\v\f2 <PSI_START_OBJECT><PSI_MEDIA><Media2><MediaID>16346</MediaID><Name>\f3\rtlch\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9</\f2\ltrch Name><FileName>N:\\media\f3\rtlch\\\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9_1.\f2\ltrch wav</FileName><Length>00:00:33.0</Length><OutCue></OutCue><Description></Description></Media2><PSI_MID_OBJECT\f3\rtlch >\v0\f0\'c7\'e1\'ca\'de\'d1\'ed\'d1 \'c7\'e1\'c5\'ce\'c8\'c7\'d1\'ed : \cf2\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9\par
\cf1\'c7\'e1\'e3\'cf\'f8\'c9 : \cf2\f3 00:00:33.0\cf3\i\f4 .\v <\f1\ltrch PSI_END_OBJECT\f4\rtlch >\cf0\v0\f1\ltrch\par
und hier ist das, was wie nach der Validierung aussieht:
\cf1\i0\protect\v\f2 <PSI_START_OBJECT><PSI_MEDIA><Media2><MediaID>16346</MediaID><Name>\f3\rtlch\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9</\f2\ltrch Name><FileName>N:\\media\f3\rtlch\\\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9_1.\f2\ltrch wav</FileName><Length>00:00:33.0</Length><OutCue></OutCue><Description></Description></Media2><PSI_MID_OBJECT\f3\rtlch >\v0\f0\'c7\'e1\'ca\'de\'d1\'ed\'d1 \'c7\'e1\'c5\'ce\'c8\'c7\'d1\'ed : \cf2\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9\par
\cf1\'c7\'e1\'e3\'cf\'f8\'c9 : \cf2\f3 00:00:33.0\cf3\i\f4 .\v <\f1\ltrch PSI_END_OBJECT\f4\rtlch >\cf0\protect0\v0\f1\ltrch\par
wie Sie sehen können, ist der einzige Unterschied ist hier die 2 "Schützen" Einträge. Textweise sind sie genau gleich.
könnte dies ein Microsoft-Bug sein oder fehle ich etwas? FYI wir sind auf .NET Framework 4.6.2, VS2015 Update3
Ich hätte erwartet, dass jede Zuweisung an die Rtf-Eigenschaft die Undo/Redo-Puffer löscht, so dass sie nichts mit dem Inhalt zu tun haben, aber die Tatsache, dass eine Zuweisung von Code auftritt? – dlatikay
danke für die Rückmeldung. Sie könnten richtig sein, aber was ist der richtige Weg, um das RTF zu modifizieren, während Sie den Puffer für das Rückgängigmachen richtig pflegen lassen? In meinem Fall muss ich eine Region "protected" markieren, so dass die RTF geändert werden muss ... – youkebb
Dokumentation geht nicht wirklich darauf ein, aber [siehe hier] (https://www.cambiaresearch.com/articles/82/generic-undoredo-stack-in-csharp): "Bei einigen Operationen muss der gesamte RTF-Inhalt ersetzt werden, wodurch der Undo/Redo-Stapel gelöscht wird. Dies war ein Problem." Ich würde jedoch nicht so weit gehen und es als Käfer bezeichnen. Dieser Artikel funktioniert möglicherweise für Sie (Richtextbox erbt seine Rückgängig/Redu-Funktionalität aus dem Textfeld): http://stackoverflow.com/q/34091319/1132334 – dlatikay