Как работает PromptStatus.None?

Автор Тема: Как работает PromptStatus.None?  (Прочитано 2831 раз)

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Как работает PromptStatus.None?
« : 09-01-2018, 20:12:39 »
Раньше не было необходимости, но вот понадобилось
Загружаю форму WPF в ней кнопка Button.Click
По нажатию кнопки например мне необходимо выбрать несколько полилиний и так несколько раз. Esc - отмена - прерывание цикла.
Но, если ничего не выбрано, то тоже произвести какое то действие, например уведомление. Дак вот зайти в AcEd.PromptStatus.None никак не получается. По нажатию кнопки я рамкой выделяю пустую область (ничего не выделяя) или просто жму правую кнопку (у меня правая по умолчанию завершение команды) и жду что выскочит MessageBox.Show("None");. А оно не выскакивает.
В каких то элементах ввода есть AllowNone = true; Может это конечно и не то, но в PromptSelectionOptions и в PromptSelectionResult нет такого.

Код - C# [Выбрать]
  1.        
  2. private void Button_Click(object sender, RoutedEventArgs e)
  3.         {
  4. ...
  5.  
  6.             while (true)
  7.             {
  8.                     SelectionFilter filter = new SelectionFilter(new TypedValue[] { new TypedValue((int)DxfCode.Start, "*POLYLINE") });
  9.                     PromptSelectionOptions opt = new PromptSelectionOptions();
  10.                     opt.MessageForAdding = "Выберите элементы";
  11.                     opt.MessageForRemoval = "Удалите элементы";
  12.                     PromptSelectionResult entRes = SV.acEd.GetSelection(opt, filter);
  13.                     if (entRes.Status == AcEd.PromptStatus.Cancel)
  14.                     {
  15.                         MessageBox.Show("Cancel");
  16.                         break;
  17.                     }
  18.  
  19.                     else if (entRes.Status == AcEd.PromptStatus.OK)
  20.                     {
  21.                         MessageBox.Show("OK");
  22.                     }
  23.                     else if (entRes.Status == AcEd.PromptStatus.None)
  24.                     {
  25.                         MessageBox.Show("None");
  26.                         //break;
  27.                     }
  28.                     //else
  29.                     //{
  30.                     //    break;
  31.                     //}
  32.             }
  33. ...
  34.    
  35.         }

Вопрос: Как Высветить окошко, что при выборе или просто по завершению команды нажатием правой кнопки ничего не выбрано?

Блоки if else местами по порядку уже всяко менял

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Как работает PromptStatus.None?
« Ответ #1 : 09-01-2018, 20:46:05 »
Статус Error можно обработать.
Обычно обрабатывается OK, а в остальных случаях прерывание.

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

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: Как работает PromptStatus.None?
« Ответ #2 : 09-01-2018, 20:55:57 »
Статус Error можно обработать.
А вдруг понадобится эта обработка.
None ведь это вроде как Ничего не выбрано. Мне идеально подходит. Но не срабатывает.

В конце кода у меня закомментировано просто else{}. Если туда вставляю всё хорошо.  Но вдруг и просто else{} понадобится. :)

Отмечено как Решение RevitTormentor 10-01-2018, 06:21:30

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Как работает PromptStatus.None?
« Ответ #3 : 09-01-2018, 23:52:54 »
Я так подозреваю, что PromptStatus.None не выдаётся при использовании Editor.GetSelection. Этот же метод выбора, а PromptStatus.None используется в методах пользовательского ввода (GetEntity, GetDouble и т.п.). Они вроде как похожи, но разница между ними большая.
Возможно, достаточно будет просто проверить количество объектов в полученном наборе. Если 0 - то это практически тот самый None...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как работает PromptStatus.None?
« Ответ #4 : 10-01-2018, 00:00:40 »
None ведь это вроде как Ничего не выбрано. Мне идеально подходит. Но не срабатывает.
И не сработает. Читай документацию. Причем не по AutoCAD .NET API, а по ObjectARX. Конкретно описание функции acedSSGet, для которой Editor.GetSelection просто обертка. Так вот эта функция никогда не возвращает RTNONE (эквивалент PromptStatus.None)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение