Как "подружить" двойной клик в дереве в палитре и пользовательский ввод?

Автор Тема: Как "подружить" двойной клик в дереве в палитре и пользовательский ввод?  (Прочитано 5450 раз)

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Здравствуйте!
Столкнулся с неприятной особенностью - не удается никак активировать чертеж для пользовательского ввода при двойном щелчке по Node в элементе TreeView, вставленном в палитру.
Пробовал разные варианты, которые нашел в интернете:
Ничего не помогает!
Если же активировать пользовательский ввод по нажатию кнопки на палитре - то все три способа работают. Помимо кнопки, пробовал запускать по выбору пункта в контекстном меню (ToolStrip, ContextMenuStrip) - тоже работает нормально, чертеж активируется. Но, все же, очень хочется по двойному клику в TreeView выполнять действие.
Можно ли это как-то побороть?

Видеозапись действий: https://chronicle.autodesk.com/Main/Details/b7cd390f-81f1-4f2b-87db-9291321f3242
Во вложении исходники для проверки.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Читаем коммент :)
Код - C# [Выбрать]
  1. using Wpf = System.Windows;
  2. using Ctr = System.Windows.Controls;
  3. using System.Windows.Forms.Integration;
  4. ...
  5. [CommandMethod("PaletteTestRun")]
  6. public void RunTest() {
  7.         if (_palette == null) {
  8.                 _palette = new PaletteSet("Test");
  9.                 _palette.Add("WinForm", new UserControl_test());
  10.                
  11.                 // А вот с WPF всё работает как надо, без лишних
  12.                 // танцев с бубнами (информация к размышлению) :)
  13.                 Ctr.TreeView tree = new Ctr.TreeView();
  14.                 Ctr.TreeViewItem item = new Ctr.TreeViewItem();
  15.                 item.Header = "Hello from WPF";
  16.                 tree.Items.Add(item);                          
  17.                 tree.MouseDoubleClick += tree_MouseDoubleClick;
  18.                 ElementHost host = new ElementHost();
  19.                 host.Child = tree;
  20.                 _palette.Add("WPF", host);
  21.         }
  22.         _palette.Visible = true;
  23. }
  24.  
  25. void tree_MouseDoubleClick(object sender, Wpf.Input.MouseButtonEventArgs e) {
  26.         Document adoc = Application.DocumentManager.MdiActiveDocument;
  27.         Editor ed = adoc.Editor;
  28.         ed.GetPoint("\nSelect point: ");
  29. }

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий. А это тоже не помогает Taking mouse inputs from a modal dialog box ? Я не проверял, но на всякий случай.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Это не прикрутить никак. Этот метод для модальных форм или окон, а у меня немодальная палитра. По крайней мере, у меня не получилось это сделать.



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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Боюсь, что тут тебе только в ADN DevHelp смогут помочь. Я попробовал еще несколько вариантов:
1. Установить курсор в область чертежа и после этого SetFocus.
2. Утилиту Tony Tanzillo PaletteUtils (можешь глянуть исходник здесь: http://pastebin.com/cQqdgKrj)
3. Поигрался с параметрами PaletteSet
Увы. Ничего не помогло.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Да, PaletteUtils я тоже пробовал.
Пока повесил нужные действия на одиночный клик по элементу - с ним нет такой проблемы, как с двойным. Вроде, довольно удобно получилось. Посмотрим, как пользователи к этому отнесутся :)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
С двойным кликом в форме вообще весело. Раз уж не получается использовать двойной клик для пользовательского ввода, решил использовать его для других целей. Оказалось, что при одновременной подписке на одинарный и на двойной клик, событие двойного клика никогда не наступит. Выход из этого положения я нашел такой (обработка одинарных кликов с помощью таймера): http://msdn.microsoft.com/en-us/library/ms171543(v=vs.110).aspx.
Но что самое приятное - если двойной клик обрабатывать этим способом, то проблемы активации чертежа НЕТ!

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

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
На .NET никогда с таким не сталкивался, а вот в ObjectARX/MFC часто приходилось использовать аналогичные вещи.
Наверное потому, что WinForms - это обёртка над неуправляемыми функциями WinAPI. Если MFC дёргает те же функции, а скорее всего это так, то всё становится на свои места.