editor.GetKeyWords ошибка при выборе ключевого слова

Автор Тема: editor.GetKeyWords ошибка при выборе ключевого слова  (Прочитано 8057 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Код - C# [Выбрать]
  1.  
  2. List<string> formats = new List<string>();
  3. foreach (var format in PointFileFormatCollection.GetPointFileFormats(db))
  4. {
  5.     formats.Add(format.Name);
  6. }
  7. PromptResult formatSelection =  ed.GetKeywords("Выберете формат точек:", formats.ToArray());

Почему то при выборе некоторых слов не работает, м.б это связано с  допустимой длинной строки?

Отмечено как Решение Павел55 26-08-2020, 13:52:09

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Тут и длина и формат ключевых слов. Например, у тебя дважды PENZ и еще PENZD - AutoCAD такого не понимает.
То что у тебя в круглых скобках AutoCAD не воспринимает как ключевое слово. Ключевое слово, это только то, что большими буквами.
Если тебе нужны такие хитрые ключевые слова, то рекомендую не пользоваться совсем Editor.GetKeywords, а написать своё диалоговое окно (форму) с возможностью выбора и использовать её. На форуме уже неоднократно обсуждалось.
« Последнее редактирование: 26-08-2020, 14:08:10 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 554
  • Карма: 119
Почему то при выборе некоторых слов не работает, м.б это связано с  допустимой длинной строки?
GetKeyWords требователен к ключевым словам. Не терпит повторов, нельзя задавать пробелы, в каждом слове должны быть заглавные буквы, которые не повторяются, примерно так "Труба", "Заглушка", "тРойник"

Если тебе нужны такие хитры ключевые слова, то рекомендую не пользоваться совсем Editor.GetKeywords, а написать своё диалоговое окно (форму) с возможностью выбора и использовать её
Формы круто, но долго.  На форумах рекомендуют трюки:
1. Если нужны ключевые слова с пробелом, вместо пробела вставлять неразрывный пробел.
2. Использовать русские и английские буквы "Трап" "Tруба",   должно сработать.
2. GetKeyWords пробовать заменить на GetString, если устроит.
https://adn-cis.org/forum/index.php?topic=715
https://forums.autodesk.com/t5/net/getstring-with-keywords-fatal-error/m-p/3375899#M27755


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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Формы круто, но долго.
Так ведь достаточно сделать один раз и использовать при необходимости. У меня в библиотечной DLL есть два метода: "выбрать из списка" и "выбрать несколько из списка". Первый запускает окошко с простым ListBox, который допускает единичный выбор. Второй - окошко со списком CheckBox, где галочками можно отметить несколько вариантов. На вход принимается коллекция строк, на выходе - либо выбранная строка, либо коллекция выбранных строк.
P.S. Немного креатива на тему  :)
Код - C# [Выбрать]
  1. using System.Collections.Generic;
  2. using Autodesk.AutoCAD.ApplicationServices.Core;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.Civil.DatabaseServices;
  6. using Autodesk.Windows;
  7.  
  8. namespace CivilTest
  9. {
  10.     public class SelectFromList
  11.     {
  12.         [CommandMethod(nameof(SelectFromListTest))]
  13.         public void SelectFromListTest()
  14.         {
  15.             var db = HostApplicationServices.WorkingDatabase;
  16.             var taskDia = new TaskDialog
  17.             {
  18.                 WindowTitle = "Выберите формат:",
  19.                 UseCommandLinks = true
  20.             };
  21.             var formats = new List<string>();
  22.             var index = 0;
  23.             foreach (var format in PointFileFormatCollection.GetPointFileFormats(db))
  24.             {
  25.                 formats.Add(format.Name);
  26.                 taskDia.Buttons.Add(new TaskDialogButton(index++, format.Name));
  27.             }
  28.  
  29.             var res = taskDia.Show();
  30.             Application.ShowAlertDialog(formats[res]);
  31.         }
  32.     }
  33. }