Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Павел55 от 26-08-2020, 12:18:54

Название: editor.GetKeyWords ошибка при выборе ключевого слова
Отправлено: Павел55 от 26-08-2020, 12:18:54
Код - 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());
(https://i.postimg.cc/sQypsXLs/image.jpg) (https://postimg.cc/sQypsXLs)
Почему то при выборе некоторых слов не работает, м.б это связано с  допустимой длинной строки?
Название: Re: editor.GetKeyWords ошибка при выборе ключевого слова
Отправлено: Александр Ривилис от 26-08-2020, 12:38:35
Тут и длина и формат ключевых слов. Например, у тебя дважды PENZ и еще PENZD - AutoCAD такого не понимает.
То что у тебя в круглых скобках AutoCAD не воспринимает как ключевое слово. Ключевое слово, это только то, что большими буквами.
Если тебе нужны такие хитрые ключевые слова, то рекомендую не пользоваться совсем Editor.GetKeywords, а написать своё диалоговое окно (форму) с возможностью выбора и использовать её. На форуме уже неоднократно обсуждалось.
Название: Re: editor.GetKeyWords ошибка при выборе ключевого слова
Отправлено: Привалов Дмитрий от 26-08-2020, 14:05:33
Почему то при выборе некоторых слов не работает, м.б это связано с  допустимой длинной строки?
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

Название: Re: editor.GetKeyWords ошибка при выборе ключевого слова
Отправлено: Дмитрий Загорулькин от 26-08-2020, 18:28:27
Формы круто, но долго.
Так ведь достаточно сделать один раз и использовать при необходимости. У меня в библиотечной 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. }