Проблема с AutoCAD в VB.Net

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Проблема с AutoCAD в VB.Net

Сообщение NicSoft » 04.03.2006 (Сб) 15:27

Создаю объект AutoCAD (objAcad as Object) через CreateObject, чтобы не таскать лишние библиотеки, и не было проблем с версиями. Для перехода на другой лист в VB6 прекрасно работала строка objAcad.ActiveDocument.ActiveLayout=objAcad.ActiveDocument.Layouts("Model"). В VB.Net аналогичный код работает только если objAcad as AutoDesk.AutoCAD.Interop.AcadApplication, и естественно необходимо создавать ссылку на библиотеку. При этом остальные функции работают нормально. Как исправить?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.03.2006 (Пн) 12:23

Во-первых, библиотеки таскать всяко придется, а во-вторых привиденного кода недостаточно для понимания происходящего
Весь мир матрица, а мы в нем потоки байтов!

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 06.03.2006 (Пн) 23:18

Во-первых, библиотеки таскать всяко придется

Я имею ввиду библиотеки AutoCAD. Если создавать объект AutoCAD как object, то ссылка (и соответственно библиотека в дистрибутиве) будет не нужна (во всяком случае так было в VB6).

Попытаюсь описать подробнее:
1 Вариант, без ссылки на AutoCAD и AXDBLib
Код: Выделить всё
Dim objAcad As Object
objAcad = CreateObject("AUTOCAD.APPLICATION")
objAcad.Documents.Add(Application.StartupPath & "\Template.dwt")
objAcad.Visible = True
'...
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Model")
'... (работа с листом Модели)
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Лист1")
'... (работа с Лист1)
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Лист2")
'... (работа с Лист2)


в VB.Net ошибка: Член группы не найден. В строке
Код: Выделить всё
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("...")


2 Вариант, со ссылкой на AutoCAD и AXDBLib
Код: Выделить всё
Dim objAcad As Autodesk.AutoCAD.Interop.AcadApplication
objAcad = CreateObject("AUTOCAD.APPLICATION") ' или objAcad = New Autodesk.AutoCAD.Interop.AcadApplication
objAcad.Documents.Add(Application.StartupPath & "\Template.dwt")
objAcad.Visible = True
'...
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Model")
'... (работа с листом Модели)
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Лист1")
'... (работа с Лист1)
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Лист2")
'... (работа с Лист2)


работает как в VB6, так и в VB.Net

Пробовал заменить строку
Код: Выделить всё
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("Model")
на
Код: Выделить всё
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts.Item(0)
Результат аналогичный.
Может есть другой способ установления листа активным?

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 09.03.2006 (Чт) 8:44

NicSoft писал(а):....................
в VB.Net ошибка: Член группы не найден. В строке
Код: Выделить всё
objAcad.ActiveDocument.ActiveLayout = objAcad.ActiveDocument.Layouts("...")



у меня такая мулька была с экселем когда пытался передать неправильный параметр
хотя vb6 схавал в легкую
но это я так к слову :)
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 104

    TopList