私はリッチ エディット コントロールにかなりまともな構文ハイライターを既に持っていますが、それが完全に役立つ前に 1 つの最後の問題があります。取り消し操作の記録を一時的に無効にして、色付け後にユーザーが取り消しを押すと、自動化された構文ハイライターではなく、ユーザー自身の操作を元に戻すことができるようにする方法はありますか?
ただし、この問題を回避するためだけに Scintilla.NET エディターを実装する時間はないと思います。助言がありますか?
私はリッチ エディット コントロールにかなりまともな構文ハイライターを既に持っていますが、それが完全に役立つ前に 1 つの最後の問題があります。取り消し操作の記録を一時的に無効にして、色付け後にユーザーが取り消しを押すと、自動化された構文ハイライターではなく、ユーザー自身の操作を元に戻すことができるようにする方法はありますか?
ただし、この問題を回避するためだけに Scintilla.NET エディターを実装する時間はないと思います。助言がありますか?
ほぼ @Karl Edwall が上で言っているようですが、完全ではありません:インターフェイスEM_GETOLEINTERFACE
を取得して.IRichEditOle
IID_ITextDocument
それを取得したら、(他の回答の Freeze/Unfreeze の代わりに)次のUndo()
メソッドを使用します。
Undo(tomSuspend,NULL);
元に戻すを一時的に中断するUndo(tomResume,NULL);
再び再開するには( http://support.microsoft.com/kb/199 852 を参照してください。)RichEdit 3.0 が必要ですが、これは Windows XP SP1 以降に出荷されています。
RTB に頼るのではなく、元に戻す/やり直しを自分で処理する必要があります。つまり、キーボード イベントにフックして CTRL+Z などをリッスンします。
コードプロジェクトのこの作成者が、同様の RTB オーバーライドされた構文強調表示エディターでどのようにそれを行ったかを見ることができます: http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx