Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: art_rrc от 30-10-2015, 14:21:14

Название: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 30-10-2015, 14:21:14
Доброго времени суток. Не получается "прикрутить" CommandHandler для ComboBox. Т.е. необходимо, чтоб при выборе элемента из ComboBox, в зависимости от значения менялась картинка на кнопке. С обычными кнопками проблем нет, но элементы выпадающего списка никак не реагируют. Пробовал назначать как элементам:
Код - vb.net [Выбрать]
  1. cbButton1.CommandHandler = New CommandHandler_Button2()
  2. cbButton2.CommandHandler = New CommandHandler_Button2()
Так и самому списку:
Код - vb.net [Выбрать]
  1. comboBox1.CommandHandler = New CommandHandler_Button2()
Результат нулевой. Отсюда вопрос.. Это вообще возможно? Или списки служат только для чтения информации из них?
Код целиком:
 
Извините, вам запрещён просмотр содержимого спойлеров.

ps Есть также вопрос, который лишь косвенно касается темы, но он мне кажется слишком незначительным, чтоб создавать новую тему. Как видно из гифки, часть кнопок подрезаются, хотя все изображения имеют размер 32x32 (примеры во вложении). Может кто-нибудь сталкивался с таким разным поведением иконок? Подскажите пожалуйста как побороть. Можно конечно просто использовать другим картинки, в том числе и просто нарисовать самому, но может есть более элегантное решение? Спасибо.
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Пекшев aka Modis от 30-10-2015, 14:27:17
ps Есть также вопрос, который лишь косвенно касается темы, но он мне кажется слишком незначительным, чтоб создавать новую тему. Как видно из гифки, часть кнопок подрезаются, хотя все изображения имеют размер 32x32 (примеры во вложении). Может кто-нибудь сталкивался с таким разным поведением иконок? Подскажите пожалуйста как побороть. Можно конечно просто использовать другим картинки, в том числе и просто нарисовать самому, но может есть более элегантное решение? Спасибо
Вот на этот вопрос могу ответить - для картинок нужно менять разрешение с 72 на 96 пикселей/дюйм. При этом, соответственно, размер самого изображения оставлять прежним (16х16 или 32х32). В фотошопе точно это можно сделать
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Пекшев aka Modis от 30-10-2015, 14:31:59
По поводу основного вопроса - могу выдвинуть предположение: нельзя одинаковый CommandHandler прикрутить и к кнопке и к ComboBox!
Название: Re: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 30-10-2015, 14:50:17
По поводу основного вопроса - могу выдвинуть предположение: нельзя одинаковый CommandHandler прикрутить и к кнопке и к ComboBox!
Да, с комбобокс - это я уже уже в порядке многократного научного тыка пытался что-то нащупать и сам слабо верил в успех. :)
Но ведь по сути элементы на вкладке и в combobox ничем не отличаются. 
Код - vb.net [Выбрать]
  1. Dim button3 As New RibbonButton()
  2. Dim cbButton1 As New RibbonButton()
Но судя по всему, когда мы выбираем элемент из списка, автокад воспринимает это  ни как нажатие на кнопку, а как "выбор элемента списка". (простите за тавтологию). Конечно, можно просто изменить логику программы, либо отказаться от задуманного элемента "красивости" интерфейса, но пока кажется, что все должно быть проще. Ведь не спроста у comboBox есть свойство CommandHandler...
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Владимир Шу от 30-10-2015, 15:04:00
http://stackoverflow.com/questions/9225055/c-sharp-change-combobox-button-size-and-image
Название: Re: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 30-10-2015, 15:08:55
http://stackoverflow.com/questions/9225055/c-sharp-change-combobox-button-size-and-image
Большое спасибо, буду разбираться!
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Пекшев aka Modis от 30-10-2015, 15:51:50
http://stackoverflow.com/questions/9225055/c-sharp-change-combobox-button-size-and-image
Ссылка вообще не по теме))

А вот ссылка по теме - https://forums.autodesk.com/t5/net/create-custom-ribbon-tab-and-buttons-for-autocad-mechanical-2011/td-p/2834343
Там в комментах есть рабочий пример и разговоры на тему "хватит использовать Vb.Net!!!!!"  ;D
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Владимир Шу от 30-10-2015, 15:58:14
Ссылка вообще не по теме))
Цитировать
I have a combobox in my winform, and I wish change the button that show the list (with the triangle) with another button or at least change the image..
Навык англ языка у меня не очень, но ИМХО, разве то что написано выше и то что хочет автор темы не одно и тоже?
А вообще эта ссылка как бы намекает, что поиск никто не отменял...
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Пекшев aka Modis от 30-10-2015, 16:03:56
разве то что написано выше и то что хочет автор темы не одно и тоже?
Неа ))
Смысл в том, что Ribbon в автокаде и его контролы работают немного по-другому. Так что обычные решения для окон (а тем более для winform) не подходят. Лента - это вообще отголосок WPF, а не WinForm!
Автору нужно, чтобы срабатывало событие при выборе элемента в RibbonCombo. Из-за специфики последнего - для него нужно создавать это событие. Это написано в ссылке, которую я дал. А в комментариях в той ссылке кто-то пробовал перевести с C# на Vb.Net и у него не получилось. Лично мне не хочется с этим разбираться, т.к. не люблю и любить не буду я этот VB. Вот и говорю ТС - бросай ты это гиблое дело!!!
А вообще эта ссылка как бы намекает, что поиск никто не отменял...
Поверь, подобное не так легко найти)
Название: Re: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 30-10-2015, 19:43:46
Большое спасибо, буду разбираться!
Разобрался, совсем не то.
А вот ссылка по теме - https://forums.autodesk.com/t5/net/create-custom-ribbon-tab-and-buttons-for-autocad-mechanical-2011/td-p/2834343
Большое спасибо, ссылка действительно по теме. После небольшой доработки на C# удалось достичь необходимого результата. Наибольший интерес представляют строки:
Код - C# [Выбрать]
  1. public Ribbon()
  2.         {
  3.             pan3ribcombo.CurrentChanged += new EventHandler<RibbonPropertyChangedEventArgs>(pan3ribcombo_CurrentChanged);
  4.         }
  5.  
  6.         private void pan3ribcombo_CurrentChanged(object sender, RibbonPropertyChangedEventArgs e)
  7.         {
  8.             RibbonButton but = pan3ribcombo.Current as RibbonButton;
  9.             acadApp.ShowAlertDialog(but.Text);
  10.         }
Как немного раньше и говорил Александр Пекшев aka Modis, нужно действовать через обработчик события изменения ComboBox
Осталось только разобраться что же такое RaiseEvent (его просит отладчик VB), нужен ли он вообще и грамотно все прикрутить на VB.net.
Что ж, видимо придется чуть раньше, чем планировал, погружаться в изучение раздела "события". Спасибо большое еще раз за очень полезную ссылку!
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Ривилис от 30-10-2015, 20:02:37
Что ж, видимо придется чуть раньше, чем планировал, погружаться в изучение раздела "события".
Или в изучение C#...
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Владимир Шу от 30-10-2015, 20:25:38
Осталось только разобраться что же такое RaiseEvent (его просит отладчик VB), нужен ли он вообще и грамотно все прикрутить на VB.net.
Что ж, видимо придется чуть раньше, чем планировал, погружаться в изучение раздела "события".
или собрать сборку на С#, а потом посмотреть через отладчик, как это будет выглядеть в VB.NET
Название: Re: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 30-10-2015, 20:27:43
Или в изучение C#...
Учитывая количество информации по С#, мысли уже посещают все чаще и видимо переход и изучение начнется гораздо раньше, чем даже сам планировал. Потому что все равно все примеры по C# и приходится вникать, а зачастую даже компилировать и допиливать все в проекте C#, а потом фрагменты конвертировать и уже затачивать под VB. Крайне неэффективно, буду делать выводы  :).
По теме. Обработчик события на VB приобрел следующий вид:
Код - vb.net [Выбрать]
  1. Public Sub New()
  2.             AddHandler pan3ribcombo.CurrentChanged, AddressOf pan3ribcombo_CurrentChanged
  3.     End Sub
  4.     Private Sub pan3ribcombo_CurrentChanged(sender As Object, e As RibbonPropertyChangedEventArgs)
  5.         Dim but As RibbonButton = TryCast(pan3ribcombo.Current, RibbonButton)
  6.         Application.ShowAlertDialog(but.Text)
  7.     End Sub
По поводу грамотности конечно же большие вопросы, но по крайней мере работает. :)
Название: Re: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 30-10-2015, 20:29:23
или собрать сборку на С#, а потом посмотреть через отладчик, как это будет выглядеть в VB.NET
Я пока так не умею   :'(
Добавлено:
ps Решил изменить в конце смайл с  ":)" на  ":'("
 ;D
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Ривилис от 30-10-2015, 23:57:50
Цитата: Boxa.Shu от 30-10-2015, 19:25:38

    или собрать сборку на С#, а потом посмотреть через отладчик, как это будет выглядеть в VB.NET

Я пока так не умею   :'(
Отладчик не нужен. Достаточно бесплатного ILSpy ( http://ilspy.net/ )

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F6427%2F7842324.4%2F0_10e5c2_6706d317_orig.png&hash=805162c7a23b78d886cbbd95ad69d9a4)

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F4006%2F7842324.4%2F0_10e5c3_b3f9c639_orig.png&hash=ca92e781ff448c279087123a48b2696a)

Название: Re: CommandHandler для ComboBox не работает
Отправлено: Владимир Шу от 01-11-2015, 12:02:11
Отладчик не нужен. Достаточно бесплатного ILSpy ( http://ilspy.net/ )
Спасибо, поправили мою безграмотность, его и имел ввиду. В бытность, когда писал на VB, сам так часто делал.
Название: Re: CommandHandler для ComboBox не работает
Отправлено: art_rrc от 01-11-2015, 13:11:47
Отладчик не нужен. Достаточно бесплатного ILSpy ( http://ilspy.net/ )
Отличный офлайновый сервис! Очень удобно, что можно просто подгрузить проект, а не надо копировать-вставлять части кода. Спасибо!
Название: Re: CommandHandler для ComboBox не работает
Отправлено: sergolga от 18-10-2016, 20:14:31
Или в изучение C#...
Вопрос в продолжение темы, особенно, к автору, который мучился с vb и думал о переходе на с# (чем дело-то кончилось?),  и к Александру, который настоятельно советовал перейти и не мучиться, а также к тем, кто может дать профессиональный совет по выбору: vb.net или с#?
Воюю с той же темой оформления Риббов,что и автор; застряла на элементарном - назначении иконки своего дизайна, а впереди борьба с Комбобокс (они мне тоже нужны).
Борьба только начата, раньше работала на vba, но решила перевести свои прикладные наработки на более серьезные рельсы, переводить начала  недели две назад ( vb.net в visual studio 2015 для autocad 2016).
И как и автор замечаю, что больше всего информации и примеров по с# и тоже думаю, не стоит ли (пока глубоко не погрузилась в перевод своего vba на vb.net) резко перейти на c#. Так что посоветуют мне аксакалы: пока непоздно перейти на c# или остаться на vb.net (может есть причины кроме той, что этот язык поближе к vba)? Скажу сразу изучение нового языка меня не пугает, но и переходить на новый язык, если старый по "силе" равнозначен, тоже смысла не вижу. Может я просто не нашла хороший ресурс по vb.net?
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Ривилис от 18-10-2016, 20:16:43
не стоит ли (пока глубоко не погрузилась в перевод своего vba на vb.net) резко перейти на c#.
Стоит и немедленно.
По поводу иконки для риббона - нагуглил со смартфона за пару минут: http://khagolam.com/blogs/?p=57
Название: Re: CommandHandler для ComboBox не работает
Отправлено: sergolga от 18-10-2016, 22:50:43
По поводу иконки для риббона - нагуглил со смартфона за пару минут
Александр, спасибо за совет.
Да, указанное Вами решения я тоже нагуглила (жалко, что будучи на C# оно мне не помогло с vb). Я и еще кучу нагуглила, в т.ч. именно на vb.net - вот только где-то какой-то в них есть подвох. Так например, гладко шедший  пример с http://forums.autodesk.com/t5/net/create-custom-ribbon-tab-and-buttons-for-autocad-mechanical-2011/td-p/2834343, на моменте pan1button1.Image = Images.getBitmap(My.Resources.Small) - встал в ступор, т.к. не понимает он такую формулировку  в объектной системе Автокада 2016 и все тут,  и никак не могу вычислить как можно написать ее по другому. Ну да ладно. Как Вы правильно посоветовали - буду перестраиваться на C#! Еще раз спасибо, за ответ.
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Ривилис от 18-10-2016, 22:57:33
Ну да ладно. Как Вы правильно посоветовали - буду перестраиваться на C#! Еще раз спасибо, за ответ.
И это правильно! :)
на моменте pan1button1.Image = Images.getBitmap(My.Resources.Small) - встал в ступор, т.к. не понимает он такую формулировку  в объектной системе Автокада 2016 и все тут
А причем тут объектная система AutoCAD? Small должен быть в данном случае ресурсом внутри созданной вами .NET-сборки. Вы создали иконку и поместили её как ресурс в сборку с именем Small?
Название: Re: CommandHandler для ComboBox не работает
Отправлено: Александр Ривилис от 19-10-2016, 00:20:09
Я не поленился и сделал полноценный пример на VB.NET (хотя мне было это очень не комфортно). Результат выглядит так:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F97268%2F7842324.7%2F0_13fbd3_31c71c08_orig.png&hash=ae7f9f71a8d679664e70deff7abf05b1)

Проект (VS 2015 для AutoCAD 2016) приложен. Скорее всего понадобится изменить пути к сборкам AutoCAD.




Название: Re: CommandHandler для ComboBox не работает
Отправлено: sergolga от 19-10-2016, 17:08:37
А причем тут объектная система AutoCAD? Small должен быть в данном случае ресурсом внутри созданной вами .NET-сборки
Александр, спасибо за Ваше внимание. По объектной модели, как оказалось, я изначально не увидела функцию Images  внизу програмки исходника, а когда досканально просматривала Ваш Файл - заметила ее. Без этой функции, соответственно грешила на объектную модель, т.к. элемент Images в Autodesk.Windows отсутствовал. По подключению русурсов, благодаря https://habrahabr.ru/post/263373/ думала, что они у меня подключены через Добавить файл/ изменить действие при построении на ресурс. Послезла благодаря Вашей наводке на специализированный источники и подключила ресурс черзе Свойства/Ресурсы. Все заработало.
Понимаю, что ошибки у меня глупые, но и visual studio для меня нова и vb.net не совсем vba. В свое оправдание могу лишь сказать, что мучилась долго самостоятельно, прежде чем написать здесь о своей проблеме.
Еще раз спасибо за наводки и внимание, без них я бы и в C# явно наткнулась на теже грабли.