10/01/2014
Как завершить "Editor.GetSelection" при выборе ключевого слова
Один из путей выхода из метода “GetSelection” по ключевому слову – это создать исключение в обработчике события ввода ключевых слов. Ниже простой пример объясняющий эту технику. При нажатии любого ключевого слова генерируется исключение “Autodesk.AutoCAD.Runtime.ErrorStatus.OK” с передачей ключевого слова. Это исключение обрабатывается в коде для идентификации введенного ключевого слова.
Код - C#: [Выделить]
- [CommandMethod("SELKW")]
- public void GetSelectionWithKeywords()
- {
- Document doc =
- Application.DocumentManager.MdiActiveDocument;
- Editor ed = doc.Editor;
- // Создаём объект для настройки выбора примитивов
- PromptSelectionOptions pso = new PromptSelectionOptions();
- // Добавим ключевые слова
- pso.Keywords.Add("ПЕрвый");
- pso.Keywords.Add("ВТорой");
- // Установим наши подсказки чтобы они вклбчали ключевые слова
- string kws = pso.Keywords.GetDisplayString(true);
- pso.MessageForAdding =
- "\nДобавить объекты в набор или " + kws;
- pso.MessageForRemoval =
- "\nУдалить объекты из набора или " + kws;
- // Устанавливаем обработчик события ввода ключевого слова
- pso.KeywordInput +=
- new SelectionTextInputEventHandler(pso_KeywordInput);
- PromptSelectionResult psr = null;
- try
- {
- psr = ed.GetSelection(pso);
- if (psr.Status == PromptStatus.OK)
- {
- // Тут ваша логика обработки
- }
- }
- catch (System.Exception ex)
- {
- if (ex is Autodesk.AutoCAD.Runtime.Exception)
- {
- Autodesk.AutoCAD.Runtime.Exception aEs =
- ex as Autodesk.AutoCAD.Runtime.Exception;
- // Пользователь ввел ключевое слово.
- if (aEs.ErrorStatus ==
- Autodesk.AutoCAD.Runtime.ErrorStatus.OK)
- {
- ed.WriteMessage("\nВведено ключевое слово: {0}",
- ex.Message);
- }
- else
- {
- // другое исключение - обработайте его!
- }
- }
- }
- }
- void pso_KeywordInput(object sender, SelectionTextInputEventArgs e)
- {
- // Пользователь выбрал ключевое слово - сгенерируем исключение
- throw new Autodesk.AutoCAD.Runtime.Exception(
- Autodesk.AutoCAD.Runtime.ErrorStatus.OK, e.Input);
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=445
Опубликовано 10.01.2014Отредактировано 10.01.2014 в 19:44:45