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

ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 07-09-2018, 18:10:30

Название: Открытие ColorDialog
Отправлено: Алексей Терно от 07-09-2018, 18:10:30
У меня есть свое диалоговое окно (Form). В нем я нажимаю кнопку и открывается диалоговое окно Autodesk.AutoCAD.Windows.ColorDialog, с помощью которого я выбираю цвет. Все работает, но при открытии ColorDialog оно не в фокусе и чтобы выбрать цвет, сперва необходимо кликнтуть на этой окно, чтобы передать ему фокус, а уже потом выбирать цвет. Т.е. для выбора цвета необходимо кликать два раза, что не удобно. Я пробовал и ColorDialog.ShowDialog() и ColorDialog.ShowModal(), но результат одинаковый. Как открыть ColorDialog, чтобы оно сразу было в фокусе и можно было сразу выбрать цвет?
Название: Re: Открытие ColorDialog
Отправлено: Дмитрий Загорулькин от 07-09-2018, 18:32:34
У меня есть свое диалоговое окно (Form)
Windows Forms?
У меня в WPF таких проблем нет:
(https://s8.postimg.cc/7k2etfcg1/Color_Dialog.gif) (https://postimg.cc/image/7k2etfcg1/)
Код - 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.  
Название: Re: Открытие ColorDialog
Отправлено: Алексей Терно от 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.  
Название: Re: Открытие ColorDialog
Отправлено: Дмитрий Загорулькин от 08-09-2018, 11:28:59
Возможно это такая особенность WinForms. Я бы сделал формочку с одной кнопкой - запуск этого диалога, и посмотрел бы как оно работает на ней. Если так же - то это общая проблема, если нет - то проблема с отдельной формой.
Название: Re: Открытие ColorDialog
Отправлено: Алексей Терно от 08-09-2018, 11:42:23
В другом проекте такая же проблема, так что дело не в этой конкретной форме.
Название: Re: Открытие ColorDialog
Отправлено: Александр Ривилис от 08-09-2018, 20:39:40
Алексей Терно,
А через Application.ShowModalDialog? Раньше вторника проверить не смогу.
Название: Re: Открытие ColorDialog
Отправлено: Алексей Терно от 08-09-2018, 21:10:11
Функции ShowModalDialog в качестве аргумента требуется класс Form, а диалоговое окно выбора цвета - это класс ColorDialog без наследования:
(https://s33.postimg.cc/5u7rmvmin/2018-09-08_21-06-23.png)

Поэтому они не совместимы:
(https://s33.postimg.cc/7aja4kufz/2018-09-08_21-08-12.png)

UPD: кстати, такая же история и с другими окнами - LinetypeDialog и LineWeightDialog.
Название: Re: Открытие ColorDialog
Отправлено: Александр Ривилис от 08-09-2018, 21:22:25
Проверь: http://adndevblog.typepad.com/autocad/2012/09/show-autocad-color-dialog.html
У тебя форма модальная из которой ты вызываешь ColorDialog?
Название: Re: Открытие ColorDialog
Отправлено: Алексей Терно от 08-09-2018, 21:33:22
Да - модальная, открываю с помощью Application.ShowModalDialog.
Если открыть ColorDialog не из формы, то все хорошо - фокус сразу на диалоговом окне.
Название: Re: Открытие ColorDialog
Отправлено: Александр Ривилис от 10-09-2018, 11:54:36
Здесь объяснение: https://forums.autodesk.com/t5/net/colordialog/m-p/3056848#M23953
Думаю, что тебе в данном случае может помочь только хук.
Название: Re: Открытие ColorDialog
Отправлено: Дмитрий Загорулькин от 10-09-2018, 12:06:02
А может попробовать задействовать Editor.StartUserInteraction? Оно, правда, насколько я помню, полностью скрывает основное модальное окно. Но может это не критично?
Название: Re: Открытие ColorDialog
Отправлено: Александр Ривилис от 10-09-2018, 12:08:44
А может попробовать задействовать Editor.StartUserInteraction? Оно, правда, насколько я помню, полностью скрывает основное модальное окно. Но может это не критично?
Судя по описанию проблема в том, что запуск диалога идёт в событии imagebox.click
Название: Re: Открытие ColorDialog
Отправлено: Алексей Терно от 12-09-2018, 02:26:52
Совершенно верно.
Название: Re: Открытие ColorDialog
Отправлено: Александр Ривилис от 12-09-2018, 16:20:02
Совершенно верно.
Ну тогда только принудительное назначение фокуса на диалог в каком-нибудь хуке. Хотя большого смысла в этом я не вижу.