Открытие ColorDialog

Автор Тема: Открытие ColorDialog  (Прочитано 8089 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Открытие ColorDialog
« : 07-09-2018, 18:10:30 »
У меня есть свое диалоговое окно (Form). В нем я нажимаю кнопку и открывается диалоговое окно Autodesk.AutoCAD.Windows.ColorDialog, с помощью которого я выбираю цвет. Все работает, но при открытии ColorDialog оно не в фокусе и чтобы выбрать цвет, сперва необходимо кликнтуть на этой окно, чтобы передать ему фокус, а уже потом выбирать цвет. Т.е. для выбора цвета необходимо кликать два раза, что не удобно. Я пробовал и ColorDialog.ShowDialog() и ColorDialog.ShowModal(), но результат одинаковый. Как открыть ColorDialog, чтобы оно сразу было в фокусе и можно было сразу выбрать цвет?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Открытие ColorDialog
« Ответ #1 : 07-09-2018, 18:32:34 »
У меня есть свое диалоговое окно (Form)
Windows Forms?
У меня в WPF таких проблем нет:

Код - C# [Выбрать]
  1. private void Rectangle_MouseLeftButtonUp
  2.     (object sender, MouseButtonEventArgs e)
  3. {
  4.     AcWin.ColorDialog colorDia = new AcWin.ColorDialog();
  5.     colorDia.Color = Color.ToAcColor();
  6.     colorDia.IncludeByBlockByLayer = IncludeByBlockByLayer;
  7.     AcWin.ColorDialog.ColorTabs tabs = AcWin.ColorDialog.ColorTabs.ACITab;
  8.     if (UseRBGColor)
  9.     {
  10.         tabs |= AcWin.ColorDialog.ColorTabs.TrueColorTab;
  11.     }
  12.     colorDia.SetDialogTabs(tabs);
  13.     WinForm.DialogResult diaRes = colorDia.ShowDialog();
  14.     if (diaRes == WinForm.DialogResult.OK)
  15.     {
  16.         Color = new AcColorData(colorDia.Color);                
  17.     }      
  18. }
  19.  

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Открытие ColorDialog
« Ответ #2 : 07-09-2018, 18:59:22 »
А вот как это работает у меня:


Код - C# [Выбрать]
  1. Autodesk.AutoCAD.Windows.ColorDialog dc = new Autodesk.AutoCAD.Windows.ColorDialog
  2. {
  3.     Color = c.ColorValue,
  4.     IncludeByBlockByLayer = true
  5. };
  6. dc.SetDialogTabs(Autodesk.AutoCAD.Windows.ColorDialog.ColorTabs.ACITab);
  7.  
  8. if (dc.ShowModal().Value)
  9. {
  10.     c.ColorValue = dc.Color;
  11. }
  12.  

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Открытие ColorDialog
« Ответ #3 : 08-09-2018, 11:28:59 »
Возможно это такая особенность WinForms. Я бы сделал формочку с одной кнопкой - запуск этого диалога, и посмотрел бы как оно работает на ней. Если так же - то это общая проблема, если нет - то проблема с отдельной формой.

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Открытие ColorDialog
« Ответ #4 : 08-09-2018, 11:42:23 »
В другом проекте такая же проблема, так что дело не в этой конкретной форме.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Открытие ColorDialog
« Ответ #5 : 08-09-2018, 20:39:40 »
Алексей Терно,
А через Application.ShowModalDialog? Раньше вторника проверить не смогу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Открытие ColorDialog
« Ответ #6 : 08-09-2018, 21:10:11 »
Функции ShowModalDialog в качестве аргумента требуется класс Form, а диалоговое окно выбора цвета - это класс ColorDialog без наследования:


Поэтому они не совместимы:


UPD: кстати, такая же история и с другими окнами - LinetypeDialog и LineWeightDialog.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Открытие ColorDialog
« Ответ #7 : 08-09-2018, 21:22:25 »
Проверь: http://adndevblog.typepad.com/autocad/2012/09/show-autocad-color-dialog.html
У тебя форма модальная из которой ты вызываешь ColorDialog?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Открытие ColorDialog
« Ответ #8 : 08-09-2018, 21:33:22 »
Да - модальная, открываю с помощью Application.ShowModalDialog.
Если открыть ColorDialog не из формы, то все хорошо - фокус сразу на диалоговом окне.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Открытие ColorDialog
« Ответ #9 : 10-09-2018, 11:54:36 »
Здесь объяснение: https://forums.autodesk.com/t5/net/colordialog/m-p/3056848#M23953
Думаю, что тебе в данном случае может помочь только хук.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Открытие ColorDialog
« Ответ #10 : 10-09-2018, 12:06:02 »
А может попробовать задействовать Editor.StartUserInteraction? Оно, правда, насколько я помню, полностью скрывает основное модальное окно. Но может это не критично?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Открытие ColorDialog
« Ответ #11 : 10-09-2018, 12:08:44 »
А может попробовать задействовать Editor.StartUserInteraction? Оно, правда, насколько я помню, полностью скрывает основное модальное окно. Но может это не критично?
Судя по описанию проблема в том, что запуск диалога идёт в событии imagebox.click
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Открытие ColorDialog
« Ответ #12 : 12-09-2018, 02:26:52 »
Совершенно верно.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Открытие ColorDialog
« Ответ #13 : 12-09-2018, 16:20:02 »
Совершенно верно.
Ну тогда только принудительное назначение фокуса на диалог в каком-нибудь хуке. Хотя большого смысла в этом я не вижу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение