AutoCAD .NET API - прерывание команды закрытия палитры / окна / пользователя - PullRequest
3 голосов
/ 13 января 2012

Мой первый пост, будь нежнее!

Я разрабатываю свои собственные пользовательские элементы управления для AutoCAD 2011 и не могу на всю жизнь выяснить, как прервать закрытие пользовательского элемента управления и вставить свои собственные функции перед продолжением закрытия.

Просто для наглядности вот захват.

http://imgur.com/q1yDU

Как правило, перед закрытием окна мне нужно очистить несколько своих слоев, скрытых за пространством модели, потому что, если пользователь может просто закрыть инструмент и продолжить, не выполняя очистку, он может в конечном итоге вызвать проблемы, когда дело доходит до добавление новых объектов / сохранение / и т.д. Я, конечно, не могу доверять пользователю, чтобы он нажал кнопку «Wipe» на UC перед выходом, это просто вызовет проблемы.

Итак, мой вопрос: где я ищу в API код, закрывающий пользовательский элемент управления?

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Палитры Acad на самом деле не закрываются (удаляются), когда вы нажимаете на знак «X». Они просто спрятаны. Возможно, вы захотите попробовать событие PaletteState::StateChanged. Это может сработать, когда вы «закроете» набор палитр. Просто зарегистрируйте делегата для этого события и посмотрите, вызывается ли он. Может работать.

* РЕДАКТИРОВАТЬ * Теперь, когда я больше об этом думаю, вы сможете поймать это событие, зарегистрировав делегата для события Control.VisibleChanged вашего пользовательского элемента управления. Тот, который вы добавляете в качестве ребенка в PaletteSet. Это должно сработать.

1 голос
/ 16 января 2012

Это скорее комментарий, чем ответ, но я боюсь, что он окажется слишком большим для комментария. Вот немного пищи для размышлений. Я постараюсь быть как можно мягче, но я не известен среди тех, кто знает меня за мою мягкость ....;)

Я беспокоюсь, что вы идете по этому поводу ... не в идеале, архитектурно. Ваш вопрос говорит о том, что вы хотите, чтобы пользователь выполнил модальную операцию (команда - показ диалога - что-то с диалогом - закрытие диалога), но вы используете немодальный (потенциально всегда включенный) элемент графического интерфейса (PaletteSet).

Вы спрашивали себя - что произойдет, если пользователь никогда не закроет диалог? С PaletteSet у них есть такая опция. В этом случае ваш «вайп» никогда не запустится. Это также вызовет проблемы в будущем?

Полагаю, я хотел бы задать вам вопрос: "Является ли PaletteSet правильным инструментом для работы, которую я делаю?" Я только догадываюсь о работе и рабочем процессе из вашего описания и снимка экрана, но то, что я предполагаю, касается меня. Интересно, если вы действительно хотите использовать здесь, это простую модальную форму, запускаемую из любого механизма, который в данный момент запускает ваш PaletteSet, который пользователь должен отклонить нажатием кнопки ОК, и тогда вы сделаете «стирание» в ОК обработчик.

Если причина, по которой вы используете PaletteSet, заключается в том, что пользователь должен взаимодействовать с чертежом, пока он активен, существуют способы заставить модальный диалог убраться с дороги и позволить ему выбирать объекты или что-то еще необходимо. Имейте в виду, что, когда немодальный PaletteSet активен, пользователь может делать буквально все что угодно - открывать другие чертежи, рисовать сущности, ссылаться на другие чертежи, выполнять другие команды и т. Д. Нужно ли, чтобы ваш диалог имел такую ​​большую гибкость? Готов ли он обращаться с собой должным образом во всех этих ситуациях?

Надеюсь, это было как-то полезно, даже если я полностью неправильно понял вашу ситуацию.

...