Легкое создание кнопок на ленте для вызова внешних команд

Автор Тема: Легкое создание кнопок на ленте для вызова внешних команд  (Прочитано 25065 раз)

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

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Alexeysh

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Добрый день,

Выложите, пожалуйста, какой-нибудь пример простенького готового проекта с созданием кнопок для таких как я мягко говоря не специалистов.
А то не получается использовать, а глупые вопросы задавать стыдно...

Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Alexeysh, проект для Visual Studio с примером использования утилиты - во вложении.

Оффлайн Alexeysh

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Спасибо.

Понял, почему не получается.
В Revit 2014 все работает. А я в Revit 2015 пытаюсь... Буду разбираться...

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Alexeysh, библиотека скомпилирована под .NET 4.0, а 2015 Revit использует .NET 4.5.
Это значит, что моя библиотека просто не видна. Вам нужно ее самостоятельно скомпилировать под .NET 4.5 из исходников.

Оффлайн Alexeysh

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Да, все сделал, все работает отлично!!!

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Alexeysh, библиотека скомпилирована под .NET 4.0, а 2015 Revit использует .NET 4.5.
Это значит, что моя библиотека просто не видна. Вам нужно ее самостоятельно скомпилировать под .NET 4.5 из исходников.
Здравствуйте скажите как это делается. Где взять исходники.
В программе не могу определить b.SetLargeImage(Resources.adn_cis_logo);
Что такое Resources? Какая сборка для него нужна?
Что такое adn_cis_logo Почему не путь к файлу?
Поясните как пользоваться пожалуйста.

Кнопку то я добавил закоментив этот b.SetLargeImage(Resources.adn_cis_logo);
Как же добраться до картинки? В ресурсы я ее добавил, но правильно ли? Есть ли там секретики?

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
multys, Добрый день.

Исходники есть в статье. Ссылка на статью, в первом сообщении темы. На всякий случай, дублирую ссылку еще раз.

Ресурсы приложения - это двоичные или текстовые данные, которые не являются кодом, но включаются в проект. Подробней можно почитать на MSDN. Например, тут или тут.

После того, как вы поместите ресурсы в вашу сборку, то они обычно находятся в namespace <namespace вашей сборки>.Properties.Resources.

adn_cis_logo - имя ресурса, содержащего изображение для кнопки.

Естественно, ресурс с вашей картинкой может называться иначе.

Можно использовать и файл. В метод SetImage нужно передать объект либо Bitmap, либо ImageSource. Создайте Bitmap из файла, если это необходимо. Мне удобней пользоваться ресурсами.

« Последнее редактирование: 08-03-2015, 21:31:14 от Виктор Чекалин »

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Виктор спасибо большое буду разбираться.

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Виктор не получается. Что не так я сделал опять?


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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
multys, так ведь все ж напиано:). Нужно добавить сборку PresentationCore. Скорее всего там еще нужно будет добавить сборки System.Xaml, WindowsBase и другие сборки, необходимые для WPF.
Интерфейс ленты написан на WPF, поэтому и нужны соответствующие сборки.

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Я дело в том что тока неделю сел за С#
Раньше писал на VB но с библиотеками никогда не сталкивался, поэтому не понимаю что требует компилятор.
Точнее понимаю, но не знал что надо поискать такую сборку. Что такая есть :)))
Сборку добавил - все заработало спасибо.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Раньше писал на VB
В Visual Basic тоже есть добавление ссылок на внешние библиотеки. Возможно просто никогда не приходилось использовать.
Рад что все в итоге получилось.

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Вот в том то и дело что не приходилось. Я только научные программы писал для диссертации, а там никаких библиотек то и не надо было.
Еще закавыка с этим MSDN и SDK вот никак не пойму как пользоваться. К примеру понимаю как и что нужно получить, но как в этих справках найти нужный класс и свойство - черт ногу сломит.
Вы, Виктор когда писали свою dll -ку там получается есть какой то ваш класс где процедуры написаны, а вы потом подкрепляете dll -ку, библиотеку объявляете и получаете доступ к процедурам и свойствам? так ли я понимаю?

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Виктор скажите, а как с помощью вашей утилиты создать панель с кнопкой, НЕ создавая новую вкладку, а создать панель и кнопку в месте по умолчанию - во вкладке "Надстройки" ?

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Сергей, если я не ошибаюсь, то по-моему вот так:
Код - C# [Выбрать]
  1. Ribbon.GetApplicationRibbon(a)
  2.                 .Tab(Tab.AddIns)
  3.                 .Panel("Panel1")

Метод Tab перегружен. В качестве параметра принимается либо название таба, либо системный таб Autodesk.Revit.UI.Tab

Вот из исходников https://github.com/chekalin-v/VCRevitRibbonUtil/blob/master/src/VCRevitRibbonUtil/VCRevitRibbonUtil/Ribbon.cs#L68

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Да Виктор спасибо. Все работает.

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Виктор, есть ли где-то описание подробнее, как добавить кнопку? можно мне тоже готовый проектик небольшой? вложение на предыдущей странице не открывается.

p.s.: все открылось, пошла разбираться)))

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Виктор, подскажите пожалуйста!
проект, который выложен на предыдущей странице - у меня не запускается, выдает несколько ошибок, первая из которых :
Не удалось найти имя типа или пространства имен "Autodesk" (пропущена директива using или ссылка на сборку?)

что нужно сделать?
если можно - поясните ответ комментариями, на С# нет опыта написания программ, много вопросов возникает. Буду рада советам и полезным ссылкам. Спасибо!


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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
julikas, Если не удалость найти сборку Autodesk... то тут только две причины.
1) Revit у вас установлен в какую-либо другую директорию. Нужно просто поправить References в проекте.
2) Вы используете REvit 2015, а пример проекта написан для Revit 2014. Чтобы запустить на 2015, нужно в свойствах проекта поставить TargetFramework 4.5

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Виктор, спасибо! в 2014 revit кнопка появилась. А можно ли сделать так, чтобы она появлялась и в 2015 и во всех последующих? мы хотим написать компоненту, которая будет использоваться далее независимо от версии Revit.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
А можно ли сделать так, чтобы она появлялась и в 2015 и во всех последующих?
Одна и та же сборка не обязательно будет работать во всех версиях. Как, например, в случае с 2014 и 2015. Чтобы работало в 2015 вам нужно взять проект из исходников и собрать из него сборку для Revit 2015.

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Спасибо. поняла. Можете ли Вы порекомендовать мне что-то почитать/посмотреть по разработке компонент для Revit?

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

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

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Виктор, обращаюсь к Вам опять!
в 2014 Ревите кнопки появились. Хочу теперь, чтобы в 2015 появились. Поменяла ссылки RevitApi, RevitAPIUI. Теперь выдает ошибку:
Ошибка   3   выход из команды "copy "D:\C# для REVIT\RibbonUtilSample\RibbonUtilSample\RibbonUtilSample.addin" "C:\Users\11\AppData\Roaming\Autodesk\REVIT\Addins\2014"
copy "D:\C# для REVIT\RibbonUtilSample\RibbonUtilSample\bin\Debug\*.dll" "C:\Users\11\AppData\Roaming\Autodesk\REVIT\Addins\2014"
copy "D:\C# для REVIT\RibbonUtilSample\RibbonUtilSample\bin\Debug\*.png" "C:\Users\11\AppData\Roaming\Autodesk\REVIT\Addins\2014"" с кодом 1.   RibbonUtilSample


это где что поправить нужно?

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
julikas,
Это ошибка при выполнении скрипта после сборки проекта.
После сборки проекта я копирую нужные файлы в нужную папку, чтобы Revit их увидел.
То есть сборка у вас компилируется нормально, а ошибка именно после сборки.
Могу предположить, что надо поменять папку с номером версии с 2014 на 2015
"copy "D:\C# для REVIT\RibbonUtilSample\RibbonUtilSample\RibbonUtilSample.addin" "C:\Users\11\AppData\Roaming\Autodesk\REVIT\Addins\2015"
copy "D:\C# для REVIT\RibbonUtilSample\RibbonUtilSample\bin\Debug\*.dll" "C:\Users\11\AppData\Roaming\Autodesk\REVIT\Addins\2015"
copy "D:\C# для REVIT\RibbonUtilSample\RibbonUtilSample\bin\Debug\*.png" "C:\Users\11\AppData\Roaming\Autodesk\REVIT\Addins\2015"" с кодом 1.   RibbonUtilSample
Это делается в свойствах проекта.

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
очередное спасибо. все работает.

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Виктор, доброго дня!
мне нужно теперь на эту кнопку  обработчик - открытие файла в моем случае. Выходит, что я не на форме работаю, так ведь? компонент OpenDialog куда-то можно разместить? или как в этом случае работают?
Загружаться должен документ MS Word (docx), с этим форматом наверно тоже есть специальные правила работы?
Далее мне нужно будет описать класс, который в С++ хедером подключали всегда. Тут (в С#) как это лучше делать?


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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
julikas, рекомендую прочитать курс Моя первая программа для Autodesk Revit для того, чтобы понять как работать с Revit API.
На кнопку нужно "повесить" вызов команды. В коде команды уже выполнять нужные вам действия. В курсе описывается, как можно создать команду.

Оффлайн julikas

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Спасибо. пошла смотреть. у меня есть немалый опыт написания разного рода обработчиков и т.п. Другая стезя совсем была. И языки другие. Благодарю за поддержку.

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Виктор добрый день!
Вот есть такая штука как справка по нажатию на F1
т.е.

Код - C# [Выбрать]
  1.  ContextualHelp help = new ContextualHelp(ContextualHelpType.Url, "http://www.yandex.ru");
  2.  

Как реализовать данный код в Вашем дополнении ? Ведь нужно назначить
Код - C# [Выбрать]
  1. b.SetContextualHelp(help);
  2.  

Верно?

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Сергей, через утилиту это сделать пока нельзя. там просто нет соответствующего метода.
Но, думаю я сейчас это исправлю. Тем более у меня есть что туда добавить.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Как реализовать данный код в Вашем дополнении ?
Теперь можно.
Создал новую статью, так как там несколько полезных изменений.

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Да здорово. Но полагаю неплохо бы добавить вот эту штучку.
Чтобы можно было GIF анимацию вставлять помимо PNG и JPG

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

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

Оффлайн Сергей Одегов

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Ну думаю видео это уже фанатизм ))) :D По мне так в видео там нет необходимости. Ведь из каждого видео очень легко сделать GIF ку )))

Оффлайн oskokos

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Подскажите, при компилирование в фраймворк 4.5 вылетает такое окошко и после него все сбрасывается на 4.0. Открывал, закрывал заного все одно фраймворк не меняется. В чем причина? Можете скинуть утилиту эту для 2016 ревита?

И еще вопрос, не могу понять, а код по созданию кнопки пишется в самом приложении или в отдельном? я вот написал небольшую утилиту. это файл dll и его я объявил в файле манифеста. он появился в ревите в разделе: Внешние инструменты как по способу 1.

а вот способ 3, где писать этот код по объявлению кнопки?

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Подскажите, при компилирование в фраймворк 4.5 вылетает такое окошко и после него все сбрасывается на 4.0. Открывал, закрывал заного все одно фраймворк не меняется. В чем причина?
Такое чувство что файл проекта помечен как "Только для чтения"
И еще вопрос, не могу понять, а код по созданию кнопки пишется в самом приложении или в отдельном?
В самом приложении. В исходном солюшене на GitHub два проекта. Один из них библиотека для легкого создания, второй - пример ее использования.
Т.е. в проекте своей надстройки вы подключаете мою утилиту по легкому созданию кнопок, и в этом же проекте ее используете, т.е. создаете кнопку.
Вот проект с надстройкой с примером использования

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитата из статьи:
Цитировать
3) Изображение необходимо задавать в виде объекта класса ImageSource. Это конечно решаемо, но создает некие трудности, например, нельзя просто так вставить изображение из ресурсов.
Ошибаешься. Можно - я именно так и делаю в Revit2017AddInTemplateSet. Можешь глянуть код, если интересно как.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Ошибаешься. Можно - я именно так и делаю
Нет, не ошибаюсь. Я же не говорил, что вообще нельзя вставить из ресурсов, а что нельзя "просто" вставить, написав что то типа
Код - C# [Выбрать]
  1. pushButton.LargeImage = Resources.MyImage;
. Нужны дополнительные действия, чтобы сконвертировать изображение из ресурсов в ImageSource.
Собственно и я и ты делаем это преобразование. В твоем коде этот метод занимает > 50 строк. Это я и имел ввиду, говоря про "не просто так"

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я же не говорил, что вообще нельзя вставить из ресурсов, а что нельзя "просто" вставить, написав что то типа
Значит я тебя неправильно понял. )
В твоем коде этот метод занимает > 50 строк. Это я и имел ввиду, говоря про "не просто так"
Если говорить о вынесении операции извлечения картинки в отдельный метод, то да, поскольку там нужно выполнять все те проверки входящих параметров, которые я делал. Но в сухом остатке, по сути, сам процесс извлечения значительно компактней:

Код - C# [Выбрать]
  1. Bitmap ttp_image = res_mng.GetObject(key) as Bitmap;
  2.  
  3. BitmapSource ttp_bitmap_src = Imaging
  4.     .CreateBitmapSourceFromHBitmap(
  5.     ttp_image.GetHbitmap(), IntPtr.Zero,
  6.     WPF.Int32Rect.Empty, BitmapSizeOptions
  7. .FromEmptyOptions());
Т.е. не так уж и сложен, на мой взгляд.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Т.е. не так уж и сложен, на мой взгляд
Согласись, что для новичков, подобный метод может ввести в состояние шока:) HBitmap, указатели.. да еще и зачем то с пустыми или нулевыми значениями.. Именно для этого мы и упрощаем использование. :)

Оффлайн semyon

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Виктор Чекалин, здраствуйте хочу написать лёгкое образмеривание для примитивов автокада
, и вот никак не могу найти как обратится  к текстбоксам через редактор vba, или как передать фокус немодальной форме

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А какое отношение Ваше сообщение имеет к этой теме? Здесь вообще-то речь идёт о Revit, а не об AutoCAD и Revit .NET API, а не AutoCAD VBA. Создайте тему в правильном разделе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн semyon

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
всё уже создал спасибо, щас постараюсь удалить предыдущие сообщения

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Может кто подскажет в чем причина?

VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Еще как pushButtonData.LargeImage = new BitmapImage(new Uri("D:\\_C#\\Button_image.png")); засунуть картинку из Resources?
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Код - C# [Выбрать]
  1. // assign bitmap to button
  2.             pushButton.LargeImage = largeImage;
как засунуть картинку из Resources?

PS. сообщения не удаляются?
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
PS. сообщения не удаляются?
Нет. Это один из принципов этого форума.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Код - C# [Выбрать]
  1. // assign bitmap to button
  2.             pushButton.LargeImage = largeImage;
как засунуть картинку из Resources?

PS. сообщения не удаляются?

Получилось вот так...

Код - C# [Выбрать]
  1.         public BitmapImage ConvertToBitmapImage(Bitmap src)
  2.         {
  3.             MemoryStream ms = new MemoryStream();
  4.             ((System.Drawing.Bitmap)src).Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
  5.             BitmapImage image = new BitmapImage();
  6.             image.BeginInit();
  7.             ms.Seek(0, SeekOrigin.Begin);
  8.             image.StreamSource = ms;
  9.             image.EndInit();
  10.             return image;
  11.         }
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Получилось вот так...

Код - C# [Выбрать]
  1.            public BitmapImage ConvertToBitmapImage(Bitmap src)
  2.             {
  3.                 MemoryStream ms = new MemoryStream();
  4.                 ((System.Drawing.Bitmap)src).Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
  5.                 BitmapImage image = new BitmapImage();
  6.                 image.BeginInit();
  7.                 ms.Seek(0, SeekOrigin.Begin);
  8.                 image.StreamSource = ms;
  9.                 image.EndInit();
  10.                 return image;
  11.             }
  12.  
Чтобы не было утечки памяти лучше использовать такую конструкцию:
Код - C# [Выбрать]
  1. using (MemoryStream ms = new MemoryStream())
  2. {
  3. //... Тут твой код
  4. }
  5.  
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Может кто подскажет в чем причина?

Скорей всего сборка VCRevitRibbonUtil.dll не попала в папку, где лежит сборка надстройки.

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
я ее подключаю и "копировать локально" ставлю false или ее нужно кидать в "addins"?
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Они должны быть в одном каталоге. Иначе твоё приложение его не найдёт.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Еще как pushButtonData.LargeImage = new BitmapImage(new Uri("D:\\_C#\\Button_image.png")); засунуть картинку из Resources?
А ведь в утилитке как раз есть пример, как из ресурсов изображение добавить
Код - C# [Выбрать]
  1.                 .CreateStackedItems(si => si.CreateButton<XXXXCommand>("XXXX", "XXXX",
  2.                     b =>
  3.                     {
  4.                         b.SetLargeImage(Resources.b_32);
  5.                         b.SetSmallImage(Resources.b_16);
  6.                     })