UserControl не содержит определения для приложения - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь выполнить операцию поиска в активном текстовом документе одним нажатием кнопки.И в моем коде появляется ошибка

Кнопка находится на пользовательской панели задач

Ошибка CS1061 «UserControl1» не содержит определения для «Приложения»'и не удалось найти доступный метод расширения' Application ', принимающий первый аргумент типа' UserControl1 '(отсутствует директива using или ссылка на сборку?) WordAddIn1 c: \ users \ veroot \ source \ repos \ WordAddIn1 \ WordAddIn1 \UserControl1.cs 29 Active

И код

private void button1_Click(object sender, EventArgs e)
    {
        object findText = textBox1.Text;
        object missing = System.Type.Missing;

        Word.Document document = this.Application.ActiveDocument;
        Word.Range rng = document.Range(0, Type.Missing);


        rng.Find.Highlight = 0;
        rng.Find.Forward = true;
        do
        {
            if (rng.HighlightColorIndex == WdColorIndex.wdYellow)
            {

                rng.HighlightColorIndex = WdColorIndex.wdRed;
                rng.Font.ColorIndex = WdColorIndex.wdBlue;
            }
            int intPosition = rng.End;
            rng.Start = intPosition;
        } while (rng.Find.Execute("", missing, missing, missing, missing, missing, true,
            missing, missing, missing, missing, missing, missing, missing, missing));
    }

1 Ответ

0 голосов
/ 17 октября 2018

В решении VSTO можно использовать только ключевое слово this для ссылки на хост-приложение Office внутри класса ThisAddin.Во всех других классах, включая класс для UserControl, this будет ссылаться на этот класс (UserControl) и не будет иметь никакого отношения к приложению хоста Office или к нему.Таким образом, в случае кода, показанного в вопросе, this относится к классу UserControl.

Для ссылки на приложение Office, в котором запущена надстройка VSTO, лучше всего использовать Globals ключевое слово.Например,

 Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;

или

 Word.Document doc = Globals.ThisAddIn.app.ActiveDocument;

, где app - это поле уровня класса в классе ThisAddin - пример объявления:

    public partial class ThisAddIn
    {
        public Word.Application app;

который назначен в ThisAddin_Startup - например:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        app = this.Application;
...