Как отловить потерю фокуса в PaletteSet

Автор Тема: Как отловить потерю фокуса в PaletteSet  (Прочитано 12929 раз)

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

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

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Добрый день.
Столкнулся с такой проблемой:
Создаю свою PaletteSet,  на ней есть TextBox, который при выделении примитива в чертеже отображает для редактирования определенное свойство из словаря.
Не могу понять как отловить событие когда PaletteSet теряет фокус (или окно Autocad его получает), например при щелчке мышкой на окне autocad, чтобы закончить  редактирование TextBox. События типа TextBox.LostFocus не срабатывают. Короче мне нужно чтобы срабатывало так как в палитре свойств autocad, когда например выделен блок с атрибутом и значение атрибута редактируется в палитре свойств, а затем вы щелкаете где нибудь в чертеже мышкой, то редактирование атрибута прекращается с изменением его значения, а у меня редактирование не прекращается. Помогите кто чем может!
П.С. AutoCAD 2012 c#

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #1 : 25-11-2014, 15:48:13 »
Когда нужно принудительно сохранять фокус у палитры - присваивайте её свойству KeepFocus значение true
Вот классный (хоть и старый) гайд по работе с палитрами
Смотрите там Quirks / Combo Boxes

Блин. Чукча не читатель - чукча писатель..   :-X
Алексей

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #2 : 25-11-2014, 16:26:59 »
События типа TextBox.LostFocus не срабатывают.
А какие срабатывают? Например MouseLeave?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #3 : 25-11-2014, 16:37:23 »
MouseLeave срабатывает, так же как и все прочие, связанные с перемещением мышки, но при простом перемещении мне не нужно выходить из редактирования, нужно только если окно autocad получает фокус ввода. Думаю здесь без WinAPI не обойтись.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #4 : 25-11-2014, 17:40:21 »
Думаю здесь без WinAPI не обойтись.
Думаю можно обойтись, но нужно подбирать подходящее. Тут возможно сработает одно из событий Editor (возможно EnteringQuiescentState или LeavingQuiescentState). Возможно поможет одно из событий Editor.PointMonitor
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #5 : 25-11-2014, 17:55:51 »
Пробовал EnteringQuiescentState - не совсем то что нужно, по поведению похоже в палитре свойств AutoCAD сделано через WinAPI, в котором я плохо разбираюсь.
Попробую ещё погуглить как отловить передачу фокуса окну AutoCAD через WinAPI.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #7 : 25-11-2014, 22:09:11 »
Технологии WinForms и WPF имеют одноимённый класс Control в составе иерархий своих классов. В обоих случаях он имеет событие Control.LostFocus. На вкладках пользовательских палитр AutoCAD ты можешь создавать элементы как WinForms, так и WPF.

RTFM (MSDN)

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #8 : 25-11-2014, 22:54:58 »
Если конечно изменение того свойства не загружает ПК на пару минут - а чего не хотите менять "на лету" - ИХМО так в большинстве случаев "интерактивней" и дружелюбней для пользователя, а эти выбрал->подтвердил - по моему - наследие доса. Я наоборот "матерюсь" на автокад, что если операция "долговата", надо потоки в очередь ставить и выполнять только актуальный.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #9 : 25-11-2014, 23:02:34 »
Если конечно изменение того свойства не загружает ПК на пару минут - а чего не хотите менять "на лету" - ИХМО так в большинстве случаев "интерактивней" и дружелюбней для пользователя, а эти выбрал->подтвердил - по моему - наследие доса. Я наоборот "матерюсь" на автокад, что если операция "долговата", надо потоки в очередь ставить и выполнять только актуальный.
Несколько раз прочитал это "казнить нельзя помиловать". Ничего не понял. Сдаюсь, расставить здесь запятые так, чтобы шарада разгадалась, я не смог. :)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #10 : 26-11-2014, 00:27:36 »
Сдаюсь, расставить здесь запятые так, чтобы шарада разгадалась, я не смог. :)
Я тоже. Но это полбеды. Главное я не понял какое это отношение имеет к вопросу Gennadiy.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #11 : 26-11-2014, 00:49:07 »
Главное я не понял какое это отношение имеет к вопросу Gennadiy.
Не знаю как правильно выразить - но можно сказать "глобальное". Как я понял, у него основной вопрос как отловить потерю фокуса для запуска функции "синхронизации" TextBox поля с чертежом, а я задаю вопрос - а надо-ли оно? Можно подписаться на событие изменения поля и вносить изменения "на каждой букве" - современные машины это в абсолютном большинстве случаев позволяют делать "не напрягаясь", да и пользователю так наглядней.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #12 : 26-11-2014, 00:53:10 »
Думаю, что это возможно и даже не особо сложно. Только делать это нужно из главной задачи. Но это несколько выбивается из общего интерфейса AutoCAD и будет в начале как минимум не очевидно пользователям.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #13 : 26-11-2014, 10:14:46 »
Я там выше, вроде как показал родное решение, что называется "из коробки". Чем оно-то не устраивает?

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Как отловить потерю фокуса в PaletteSet
« Ответ #14 : 26-11-2014, 10:51:25 »
Я там выше, вроде как показал родное решение, что называется "из коробки". Чем оно-то не устраивает?

Если ты про Control.LostFocus, то не работает это в данном случае. LostFocus срабатывает при перемещении фокуса на другой Control в палетке (например при нажатии Enter, Tab или просто мышкой щелкнуть на другом Control), но если я щелкаю в области окна autocad, то Control.LostFocus не работает.