كيف يمكنني الكشف عن النص موضع المؤشر التغييرات في Word باستخدام VSTO

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

  •  09-06-2019
  •  | 
  •  

سؤال

أريد أن أكتب كلمة الدين أن يفعل بعض الحسابات بعض التحديثات واجهة المستخدم كلما قام المستخدم بكتابة شيء ما أو التحركات الحالية نقطة الإدراج.من يبحث في MSDN مستندات, أنا لا أرى أي طريقة واضحة مثل TextTyped الحدث على الوثيقة أو كائنات التطبيق.

لا أحد يعرف إذا كان هذا غير ممكن من دون التصويت على الوثيقة ؟

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

المحلول

كما ربما كنت قد اكتشفت ، كلمة الأحداث, لكنهم حقا الخشنة الأعمال مثل فتح المستند أو التبديل إلى آخر الوثيقة.انا التخمين MS فعل هذا عمدا لمنع كربي الكلي من تباطؤ الكتابة.

باختصار لا توجد طريقة لفعل ما تريد. كلمة MVP يؤكد أن في هذا الموضوع.

نصائح أخرى

في الواقع هناك طريقة لتشغيل بعض التعليمات البرمجية عند كلمة تم كتابتها ، يمكنك استخدام العلامات الذكية, وتجاوز التعرف على الطريقة ، سوف يطلق هذا الأسلوب كلما كلمة هو نوع مما يعني كلما المستخدم من كتابة بعض النصوص وضرب الفضاء ، tab أو enter المفاتيح.

مشكلة واحدة مع هذا ومع ذلك هو أنه إذا قمت بتغيير النص باستخدام "مجموعة.نص" أنه سيتم الكشف أنها كلمة التغيير استدعاء الدالة لذا فإنه يمكن أن يسبب حلقات لانهائية.

هنا بعض التعليمات البرمجية التي تستخدم لتحقيق ذلك:

public class AutoBrandSmartTag : SmartTag
{
    Microsoft.Office.Interop.Word.Document cDoc;

    Microsoft.Office.Tools.Word.Action act = new Microsoft.Office.Tools.Word.Action("Test Action");

    public AutoBrandSmartTag(AutoBrandEngine.AutoBrandEngine _engine, Microsoft.Office.Interop.Word.Document _doc)
        : base("AutoBrandTool.com/SmartTag#AutoBrandSmartTag", "AutoBrand SmartTag")
    {
        this.cDoc = _doc;

        this.Actions = new Microsoft.Office.Tools.Word.Action[] { act };
    }

    protected override void Recognize(string text, Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite site, 
        Microsoft.Office.Interop.SmartTag.ISmartTagTokenList tokenList)
    {
        if (tokenList.Count < 1)
            return;

        int start = 0;
        int length = 0;
        int index = tokenList.Count > 1 ? tokenList.Count - 1 : 1;

        ISmartTagToken token = tokenList.get_Item(index);

        start = token.Start;
        length = token.Length;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top