Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: R.I.Chernov от 22-03-2016, 13:36:48

Название: C#. ReferencedOLEFileDescriptor.Activate()
Отправлено: R.I.Chernov от 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. Что делать со вторым аргументом? Программа пишет, что переменной не присвоено значение.
Название: Re: C#. ReferencedOLEFileDescriptor.Activate()
Отправлено: mikazakov от 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.  
Название: Re: C#. ReferencedOLEFileDescriptor.Activate()
Отправлено: R.I.Chernov от 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

П.С. Каждый раз не знаю, как к вам обращаться. Правильно ли я понимаю, что вас Михаил зовут? Еще раз спасибо!
Название: Re: C#. ReferencedOLEFileDescriptor.Activate()
Отправлено: mikazakov от 22-03-2016, 18:53:47
Правильно ли я понимаю, что вас Михаил зовут?
Да.
Название: Re: C#. ReferencedOLEFileDescriptor.Activate()
Отправлено: R.I.Chernov от 22-03-2016, 18:58:12
Роман, будем знакомы.