C#. ReferencedOLEFileDescriptor.Activate()

Автор Тема: C#. ReferencedOLEFileDescriptor.Activate()  (Прочитано 3493 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
C#. ReferencedOLEFileDescriptor.Activate()
« : 22-03-2016, 13:36:48 »
Доброго времени суток, уважаемые форумчане! Помогите пожалуйста разобраться, как использовать в C# метод ReferencedOLEFileDescriptor.Activate(). Проблема моя заключается с том. что я не могу понять, какие аргументы надо подставлять. В VBA я использовал приблизительно такой код (для работы с внедренной таблицей эксель):
Код - Visual Basic [Выбрать]
  1. Dim WorkBook As Object
  2. Call ReferencedOLEFileDescriptor.Activate(kHideOLEVerb, WorkBook)

И вроде бы все должно быть аналогично, но никак не вывходит. Вопросов собственно два:
1. Какой вид должен иметь аргумент "OLEVerbEnum Verb"? Пытался подставлять "kShowOLEVerb", "kHideOLEVerb"  и т.п., программа пишет что таких имен не существует в текущем контексте.
2. Что делать со вторым аргументом? Программа пишет, что переменной не присвоено значение.
« Последнее редактирование: 22-03-2016, 17:28:11 от R.I.Chernov »
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: C#. ReferencedOLEFileDescriptor.Activate()
« Ответ #1 : 22-03-2016, 14:26:18 »
1. Какой вид должен иметь аргумент "OLEVerbEnum Verb"? Пытался подставлять "kShowOLEVerb", "kHideOLEVerb"  и т.п., программа пишет что таких имен не существует в текущем контексте.
2. Что делать со вторым аргументом? Программа пишет, что переменной не присвоено значение.

По первому вопросу, нуно добавить:
Inventor.OLEVerbEnum.kHideOLEVerb
В случае с перечислениями в NET-языках добавочное слово можно увидеть в объектном браузере, хоть в VBA хоть VS.

По второму вопросу, а не понятно что вы просите у API. ( и нуно внятнее формулировать)
Могу предположить, что с начала надо как то инициализировать ReferencedOLEFileDescriptor,
а уж потом к нему обращаться

Код - Visual Basic [Выбрать]
  1. Sub rr()
  2.  
  3. Dim doc As Document: Set doc = ThisApplication.ActiveDocument
  4.  
  5. Dim WorkBook As Object
  6. Call doc.ReferencedOLEFileDescriptors(1).Activate(kHideOLEVerb, WorkBook)
  7.  
  8. End Sub
  9.  

Отмечено как Решение R.I.Chernov 22-03-2016, 16:07:23

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: C#. ReferencedOLEFileDescriptor.Activate()
« Ответ #2 : 22-03-2016, 16:02:28 »
Спасибо огромное,mikazakov, за вашу неоценимую помощь, которую вы раз за разом оказываете, ну и за терпение к моим зачастую глупым вопросам :).
С вашего позволения, решением я отмечу свое сообщение, так как итоговый код получился несколько другой, чтобы людям удобнее было разобраться, если понадобится.

Я упускаю часть кода, чтобы было не очень громоздко, выглядит в итоге как-то так:
     
Код - C# [Выбрать]
  1.   private void Test (string EmbName)
  2.         {
  3.             Inventor.ReferencedOLEFileDescriptor oRefOLEDescTemp;
  4.             Object xlWorkbook;
  5.             oRefOLEDescTemp = oDocTemp.ReferencedOLEFileDescriptors.ItemByName[EmbName];
  6.             oRefOLEDescTemp.Activate(OLEVerbEnum.kHideOLEVerb,out xlWorkbook);
  7.         }
Обращаю внимание, что второй аргумент должен быть типа "Object", и , в отличие от VBA, имеет приписку out.
oDocTemp - объект типа PartDocument

П.С. Каждый раз не знаю, как к вам обращаться. Правильно ли я понимаю, что вас Михаил зовут? Еще раз спасибо!
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: C#. ReferencedOLEFileDescriptor.Activate()
« Ответ #3 : 22-03-2016, 18:53:47 »
Правильно ли я понимаю, что вас Михаил зовут?
Да.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: C#. ReferencedOLEFileDescriptor.Activate()
« Ответ #4 : 22-03-2016, 18:58:12 »
Роман, будем знакомы.
В программировании я новичок...но ненадолго! ;)