Достъп до едноименни COM-обекти от .NET сборки

Отново имам малък (надявам се) проблем и не знам как да получа достъп до някои свойства на презентацията, предоставени от PowerPoint (обаче дори не знам как да го търся в Google или да го търся в сайта :( ) от C#. Позволете ми да обясня. Можем да осъществим достъп до свойство TextRange както в C#, така и във VBA, съответно чрез сборник за взаимодействие и вграден VBA редактор в ms-office. Добре е, но това свойство съдържа два обекта с едно и също име - Runs , VBA позволява достъп до него като метод и като свойство (нещо повече, вътрешността на Runs обект на свойство е полезна), но свойството Runs не е достъпно чрез модула за взаимодействие, методът Runs() може да бъде достъпен само (и той връща обекти за изпълнение на текст) Разрових се в модула за взаимодействие с помощта на .NET Reflector, но не намерих нищо, свързано със свойството Runs (въпреки че свойствата с различни уникални, а не имена на методи имат собствени методи get_Property() и set_Property()). Изглежда, че модулът за взаимодействие липсва свойството Runs за интерфейс TextRange. Честно казано, не съм сигурен. :(

Мога ли по някакъв начин да получа свойството за достъп Runs от C#? Не съм запознат с COM и т.н. и се надявам на вашата помощ. Благодаря.


person Lyubomyr Shaydariv    schedule 05.01.2010    source източник


Отговори (2)


Мисля, че говорите за свойството Microsoft.Office.Core.TextRange2.Runs(). Това е свойство, което приема два аргумента, начало и дължина. Такова свойство не е директно достъпно в езика C#, поне не до C# 4.0. Само Visual Basic поддържа индексирани свойства в момента.

Заобиколното решение е вместо това да използвате get_Runs().

person Hans Passant    schedule 05.01.2010
comment
Благодаря за отговора. Не, използвам Microsoft.Office.Interop.PowerPoint.TextRange и той не съдържа дефиниция за get_Runs(). :( Също така, за съжаление трябва да отбележа, че използвам C# 2.0 и PowerPoint 2003. - person Lyubomyr Shaydariv; 05.01.2010
comment
Microsoft.Office.Interop.PowerPoint.TextRange има метод Runs(), той не е свойство. Внимавайте, че тези класове TextRange не са идентични, не можете да смесвате Word TextRange с PowerPoint TextRange. - person Hans Passant; 05.01.2010
comment
Въпреки това Microsoft.Office.Interop.PowerPoint.TextRange.Runs също е свойство и се вижда добре от VBA. Забелязахте го по-горе в отговора. Доколкото виждам, посочвам един и същ обект както от C#, така и от VBA. Разбира се, не мога да смесвам TextRange-и от пространства от имена на Office и PowerPoint, но не е необходимо. Просто искам да получа свойството .TextRange.Runs.Count. Това е единствената причина за въпроса. :) Но... Вероятно мога по някакъв начин да актуализирам генерираната библиотека за взаимодействие, когато няма изходен код? Бих искал да го подобря с нещо като get_RunsData(). Нещо такова предполагам. - person Lyubomyr Shaydariv; 05.01.2010
comment
Знаеш ли... Еммм... Няма значение, nobugz. Ще опитам по друг начин, но все още съм объркан. Може би греша. Благодаря ти. :) - person Lyubomyr Shaydariv; 05.01.2010
comment
VBA позволява пропускането на (). Не C#, .TextRange.Runs().Count - person Hans Passant; 05.01.2010
comment
Сгреших и ти беше прав, като каза, че не е собственост, nobugz. :D Причината е, че не познавам синтаксиса на VB: не знаех, че метод, който може да бъде извикан без параметри, визуално изглежда като свойство! Уау... Това ме обърка! :D Благодаря отново! :Д - person Lyubomyr Shaydariv; 05.01.2010

В C# трябва да посочите къде да започнете и къде да завършите:

...

foreach (TextRange txtrn в txtrng.Runs(0, txtrng.Length)) {

if(txtrn.Font.Name =="Arial") MessageBox.Show(txtrn.Text);

}

.....

person jehell    schedule 25.01.2010
comment
Благодаря, но проблемът беше непълно неразбиране на синтаксиса на VB(A), където методите с всички пропуснати параметри изглеждат като свойства. - person Lyubomyr Shaydariv; 26.01.2010