|
|
|
| как можно перебрать все свойства объекта не используя их имена?
для чего: - есть объект (это из Инвентора)
Dim oDoc As DrawingDocument
Set oDoc = ThisApplication.ActiveDocument.SelectSet(1)
где-то в дремучем лесу его свойств запрятан нужный мне параметр - я не знаю свойства которое его хранит. поэтому хочу програмно перебрать всё что там есть | |
|
| |
|
|
|
| Ну так что может быть проще?
Пишем так примерно:
On Error Resume Next
Dim i As Long, ii As String
For i = 0 To oDoc.Properties.Count - 1
ii = ii & oDoc.Properties(i).Name
ii = ii & " = "
ii = ii & oDoc.Properties(i).Value
ii = ii & vbCrLf
Next i
MsgBox ii
On Error GoTo 0 |
On Error Resume Next тут обязателен, т.к. имя имеют все свойства, а вот значение не обязательно все (оно м.б. тупо не присвоено). Соотв при обращении- ошибка.
| |
|
| |
|
47 Кб. |
|
| я наверно неправильно обозвал - наверно это атрибут или ХЗ
вот где я хочу полазить (см. рис.) - залезть во все дырки дерева
т.е. мне нужно писать
oDoc.SelectSet(1).AttribeteSets.Item(i).Item(5)
oDoc.SelectSet(1).Leader.AllNodes.Item(1)
нужно знать все ветки - бухнуться можно, а вот как достучаться и заменить AttribeteSets ... Leader .... на
oDoc.SelectSet(1).Первое_свойство
oDoc.SelectSet(1).Второе_свойство
ХЗ полный
п.с. у него ваще нет такого свойства Properties. | |
|
| |
|
|
|
| гхм, начнем с малого.. А в чем Вы работаете? VB/VBA или VB.NET или..?
Посмотрите здесь (не оно?):
http://www.cad.ru/ru/forum/index.php?PAGE_NAME=read&FID=20&TID=7807
если пропертиса нет, то скорее это уже VB.NET
Тадысь должно быть что-то наподобии PropertySets
Не?
p.s. Если и последнее не катит, напишите после Ваших определений в коде слово oDoc и поставьте точку. Вылезет список свойств. Перемотайте его до первых букофф на P и снимите скрин с экрана... У мя нет .NET и мне не проверить ни как у себя... | |
|
| |
|
|
|
| Я понял. Скрин все показал. К сожалению, нахрапом, у мя это не выйдет. Необходимо иметь такую же объектную модель, дабы ее подключить. И желательно ту же среду программирования. Пока бишь у меня есть только иная среда программирования...
еще мысли: если количество входящих уровней свойств заранее не известно, необходимо будет писать функцию, которая в случае обнаружения входящего в нее свойства вызывала бы себя рекурсивно. | |
|
| |
|
|
|
| с рекурсией и ежу понятно - не понятно как обратиться к свойству объекта перебором
за ссылку спасибо - но это перебор свойств только одной ветки - там их до фига таких веток, вот как ее получить? (бьется лбом о клаву) | |
|
| |
|
|
|
| по номеру свойства. там есть что-то типа propertis?
скорее всего нет... так. А что нам мешает пройтись по всем свойствам оператором цикла
For Each...Next
Dim x As Object
For Each x In oDoc
MsgBox TypeName(x).Name
Next x
|
| |
|
| |
|
|
|
| нет не катит.
вот нашел нечто - но хз что получится
может пригодится кому, будем копать.
с библиотекой TLBINF32.DLL
Private Sub ListProps(comServer As Object)
Dim IFaceInfo As TLI.InterfaceInfo
Dim mem As TLI.MemberInfo
Set IFaceInfo = TLI.InterfaceInfoFromObject(comServer)
On Error Resume Next
For Each mem In IFaceInfo.Members
If mem.InvokeKind = INVOKE_PROPERTYGET Then
Debug.Print "Property " & mem.Name & " = " & _
TLI.InvokeHook(comServer, mem.MemberId, INVOKE_PROPERTYGET)
End If
Next
End Sub
|
http://www.programmersforum.ru/showthread.php?t=205654 | |
|
| |
|
|
|
| получилося? опыт был бы полезен :) | |
|
| |