CommandHandler для ComboBox не работает

Автор Тема: CommandHandler для ComboBox не работает  (Прочитано 14213 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Доброго времени суток. Не получается "прикрутить" 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 (примеры во вложении). Может кто-нибудь сталкивался с таким разным поведением иконок? Подскажите пожалуйста как побороть. Можно конечно просто использовать другим картинки, в том числе и просто нарисовать самому, но может есть более элегантное решение? Спасибо.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: CommandHandler для ComboBox не работает
« Ответ #1 : 30-10-2015, 14:27:17 »
ps Есть также вопрос, который лишь косвенно касается темы, но он мне кажется слишком незначительным, чтоб создавать новую тему. Как видно из гифки, часть кнопок подрезаются, хотя все изображения имеют размер 32x32 (примеры во вложении). Может кто-нибудь сталкивался с таким разным поведением иконок? Подскажите пожалуйста как побороть. Можно конечно просто использовать другим картинки, в том числе и просто нарисовать самому, но может есть более элегантное решение? Спасибо
Вот на этот вопрос могу ответить - для картинок нужно менять разрешение с 72 на 96 пикселей/дюйм. При этом, соответственно, размер самого изображения оставлять прежним (16х16 или 32х32). В фотошопе точно это можно сделать

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: CommandHandler для ComboBox не работает
« Ответ #2 : 30-10-2015, 14:31:59 »
По поводу основного вопроса - могу выдвинуть предположение: нельзя одинаковый CommandHandler прикрутить и к кнопке и к ComboBox!

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: CommandHandler для ComboBox не работает
« Ответ #3 : 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...


Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich

Отмечено как Решение art_rrc 30-10-2015, 21:08:13

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: CommandHandler для ComboBox не работает
« Ответ #6 : 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

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: CommandHandler для ComboBox не работает
« Ответ #7 : 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..
Навык англ языка у меня не очень, но ИМХО, разве то что написано выше и то что хочет автор темы не одно и тоже?
А вообще эта ссылка как бы намекает, что поиск никто не отменял...

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: CommandHandler для ComboBox не работает
« Ответ #8 : 30-10-2015, 16:03:56 »
разве то что написано выше и то что хочет автор темы не одно и тоже?
Неа ))
Смысл в том, что Ribbon в автокаде и его контролы работают немного по-другому. Так что обычные решения для окон (а тем более для winform) не подходят. Лента - это вообще отголосок WPF, а не WinForm!
Автору нужно, чтобы срабатывало событие при выборе элемента в RibbonCombo. Из-за специфики последнего - для него нужно создавать это событие. Это написано в ссылке, которую я дал. А в комментариях в той ссылке кто-то пробовал перевести с C# на Vb.Net и у него не получилось. Лично мне не хочется с этим разбираться, т.к. не люблю и любить не буду я этот VB. Вот и говорю ТС - бросай ты это гиблое дело!!!
А вообще эта ссылка как бы намекает, что поиск никто не отменял...
Поверь, подобное не так легко найти)

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: CommandHandler для ComboBox не работает
« Ответ #9 : 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.
Что ж, видимо придется чуть раньше, чем планировал, погружаться в изучение раздела "события". Спасибо большое еще раз за очень полезную ссылку!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: CommandHandler для ComboBox не работает
« Ответ #10 : 30-10-2015, 20:02:37 »
Что ж, видимо придется чуть раньше, чем планировал, погружаться в изучение раздела "события".
Или в изучение C#...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: CommandHandler для ComboBox не работает
« Ответ #11 : 30-10-2015, 20:25:38 »
Осталось только разобраться что же такое RaiseEvent (его просит отладчик VB), нужен ли он вообще и грамотно все прикрутить на VB.net.
Что ж, видимо придется чуть раньше, чем планировал, погружаться в изучение раздела "события".
или собрать сборку на С#, а потом посмотреть через отладчик, как это будет выглядеть в VB.NET

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: CommandHandler для ComboBox не работает
« Ответ #12 : 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
По поводу грамотности конечно же большие вопросы, но по крайней мере работает. :)

Оффлайн art_rrcАвтор темы

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: CommandHandler для ComboBox не работает
« Ответ #13 : 30-10-2015, 20:29:23 »
или собрать сборку на С#, а потом посмотреть через отладчик, как это будет выглядеть в VB.NET
Я пока так не умею   :'(
Добавлено:
ps Решил изменить в конце смайл с  ":)" на  ":'("
 ;D

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: CommandHandler для ComboBox не работает
« Ответ #14 : 30-10-2015, 23:57:50 »
Цитата: Boxa.Shu от 30-10-2015, 19:25:38

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

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





Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение