تعطيل EtmerAily تعطيل C# Rich Edit Adut Enting أثناء إجراء تسليط الضوء على بناء الجملة

StackOverflow https://stackoverflow.com/questions/4138981

سؤال

لدي بالفعل لائق جدا بناء الجملة تمييز في تحكم التحرير الغني ولكن لدي مشكلة أخيرة قبل أن تكون مفيدة تمامًا: كلما قمت بتشغيل تلوين بناء الجملة ، فإنه يسجل إجراءات التلوين هذه في المخزن المؤقت للتراجع ، والذي لا أريده حقًا. هل هناك أي طريقة لتعطيل التسجيل مؤقتًا لإجراءات التراجع بحيث بعد تلوين يمكن للمستخدم الضغط على التراجع وسوف يتراجع عن إجراءات المستخدم الخاصة فقط وليست ترتيب بناء الجملة الآلي؟

لا أعتقد أن لدي الوقت لتنفيذ محرر scintilla.net فقط للتغلب على هذه المشكلة. أي اقتراحات؟

هل كانت مفيدة؟

المحلول

سيتعين عليك التعامل مع التراجع/إعادة نفسك بدلاً من الاعتماد على RTB ، مما يعني التثبيت في أحداث لوحة المفاتيح للاستماع إلى CTRL+Z ، إلخ.

يمكنك أن ترى كيف فعل هذا المؤلف من CodeProject ذلك من أجل بناء جملة RTB-Overridden المماثل محرر: http://www.codeproject.com/kb/edit/syntaxhighlighting.aspx

نصائح أخرى

يقول @karl edwall تقريبًا أعلاه ، ولكن ليس تمامًا: استخدم EM_GETOLEINTERFACE ليحصل IRichEditOle الواجهة والاستعلام عنها IID_ITextDocument.

بمجرد أن تحصل على ذلك ، استخدم (بدلاً من التجميد/الإلغاء من الإجابة الأخرى) Undo() طريقة:

  • Undo(tomSuspend,NULL); لتعليق التراجع مؤقتًا
  • Undo(tomResume,NULL); لاستئنافها مرة أخرى

(نرى http://support.microsoft.com/kb/199852.) يتطلب Richedit 3.0 ، ولكن هذا هو الشحن لأن Windows XP SP1.

حسنًا ، من C ++ ما ستفعله هو استخدام واجهة IricheDitole COM على سبيل المثال للوصول إلى واجهة TOM ItextDocument وتجميد الاستدعاء والتجميد لمنع تغييراتك من الانخفاض. ربما هذا المقال http://www.codeproject.com/kb/edit/richtextboxplus.aspx يمكن أن يكون بعض المساعدة في القيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top