Как по нажатию кнопки на собственной форме подключиться к текущему приложению

Автор Тема: Как по нажатию кнопки на собственной форме подключиться к текущему приложению  (Прочитано 14540 раз)

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

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
C этого места по подробней. С какого начала?

Я может действительно не понимаю о чем идет речь, НО:
При нажатии кнопки на ленте происходит открытие формы с помощью маленького кода:

Код - vb.net [Выбрать]
  1.         Dim myNewForm As New Form1()
  2.         myNewForm.Show()
  3.  

но что в данном коде не так? Дело в том, что форма открылась, а связи с Revit-ом у нее НЕТу. Это просто форма, которая болтается, как кошка: «сама по-себе». Всеми правдами и неправдами я пытался найти способ вывести сообщение о версии приложения Revit через эту «свободную от Revit-а форму». У меня это не получилось!

Затем я решил попробовать при запуске формы передать в процедуру ее инициализации ту самую переменную CommandData:

Код - vb.net [Выбрать]
  1.         Dim myNewForm As New Form1(commandData) ' Вот эта переменная (объект)
  2.         myNewForm.Show()
  3.  

и прописал процедуру ее инициализации с входящим в нее аргументом commandData:

Код - vb.net [Выбрать]
  1.     Public Sub New(ByVal commandData As ExternalCommandData)
  2.         MyBase.New()
  3.         InitializeComponent()
  4.         myCD = commandData
  5.     End Sub
  6.  

Получилось так, что я передал форме в момент «ее рождения» тот самый объект - commandData. Типа сделал связку с Revit-ом. Понимаете о чем я? То есть я не подключал ExternalCommandData, как экземпляр класса, внутри класса формы, а получил ее извне - из той процедуры, которая создала эту форму.

И поверьте мне - другого решения я не смог найти.

Вообще первоначально спрашивали как номер версии вывести. Про какие-то мифические проблемы инициализации формы речи не шло.

Я понимаю... мне действительно стоило подробнее написать об этой задаче, но увы... Буду стараться впредь писать подробнее.

мифические проблемы

Может и так, но я реально столкнулся с тем, что объявляя переменную Private myCommandData As ExternalCommandData привело меня к тому, что Revit просто сказал мне, что нет экземпляра этого класса. И я его понимаю. Это как если бы мне сказали: «К тебе человек должен прийти и ты должен ему кое-что дать... А я бы им в ответ: какой человек? Как его зовут? Как выглядит этот человек?» и т.д.

Недоволен тем остался, что долго искал ответ. Других недовольств у меня нет.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
но что в данном коде не так?
В коде все так. Он делает ровно столько, сколько вы написали:)

Я кажется понял в чем проблема. Есть такая штука, называется статические классы. В AutoCAD, на сколько я помню, Application является статическим классом, а значит вы можете получить к нему доступ отовсюду.
У статических классов есть, собственно как и у всего остального, свои преимущества и недостатки.
В Revit подобного нет, доступ к приложению или к документу можно получить только в определенных местах. Назвать это недостатком ни в коем случае нельзя.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Назвать это недостатком ни в коем случае нельзя.

Я бы и не посмел  :)

Назовем это - ОСОБЕННОСТЬ:D

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Есть такая штука, называется статические классы.

Спасибо за ссылку. Все встало на свои места.