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

ADN Club => AutoCAD .NET API => Тема начата: PuSTaM от 03-10-2024, 12:34:49

Название: Ввод строки пользователем, начинающейся с "("
Отправлено: PuSTaM от 03-10-2024, 12:34:49
Доброго времени суток.
Пишу программку, которая добавляет в подписи размеров префиксы и суффиксы. У некоторых пользователей есть потребность занести подпись в круглые скобки, но при вводе круглой открывающей круглой скобки автокад переходит в режим ввода lisp'а. Подскажите, пожалуйста, начинающему разработчику, как позволить пользователям ввести в префикс символ "(".

Вот такой код у меня получился на данный момент

Код - C# [Выбрать]
  1.         public void ChangeDimText()
  2.         {
  3.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  4.             Database dB = doc.Database;
  5.             Editor ed = doc.Editor;
  6.  
  7.             TypedValue[] filterListForSelectDimensions = new TypedValue[1];
  8.             filterListForSelectDimensions[0] = new TypedValue(0, "DIMENSION");
  9.             SelectionFilter filterForSelectDimensions = new SelectionFilter(filterListForSelectDimensions);
  10.  
  11.             PromptResult pref = doc.Editor.GetString("\nВведите префикс");
  12.             PromptResult suf = doc.Editor.GetString("\nВведите суффикс");
  13.  
  14.             // Starts a new transaction with the Transaction Manager
  15.             using (Transaction trans = dB.TransactionManager.StartTransaction())
  16.             {
  17.                 ed.WriteMessage("\nВыберите размеры для редактирования");
  18.                 PromptSelectionResult selDim = ed.GetSelection(filterForSelectDimensions);
  19.                 if (selDim.Status != PromptStatus.OK)
  20.                 {
  21.                     ed.WriteMessage("\nНет выбранных объектов");
  22.                     return;
  23.                 }
  24.                 ObjectIdCollection selectedDimsId = new ObjectIdCollection(selDim.Value.GetObjectIds());
  25.                 for (int i = 0; i < selectedDimsId.Count; i++)
  26.                 {
  27.  
  28.                     DBObject exampleOfDim = selectedDimsId[i].GetObject(OpenMode.ForWrite);
  29.                     Dimension dimensionForEdit = exampleOfDim as Dimension;
  30.                     if (dimensionForEdit.DimensionText != "")
  31.                     {
  32.                         string text = dimensionForEdit.DimensionText;
  33.                         if (dimensionForEdit.DimensionText.StartsWith("\\X"))
  34.                         {
  35.                             dimensionForEdit.DimensionText = dimensionForEdit.DimensionText.Insert(2, pref.StringResult) + suf.StringResult;
  36.                         }
  37.                         else
  38.                             dimensionForEdit.DimensionText = pref.StringResult + dimensionForEdit.DimensionText + suf.StringResult;
  39.                     }
  40.                     else
  41.                     {
  42.                         string newPrefix = pref.StringResult + dimensionForEdit.Prefix;
  43.                         dimensionForEdit.Prefix = newPrefix;
  44.                         dimensionForEdit.Suffix += suf.StringResult;
  45.                     }
  46.                 }
  47.                 trans.Commit();
  48.             }
  49.         }
  50.     }
  51. }
Название: Re: Ввод строки пользователем, начинающейся с "("
Отправлено: avc от 03-10-2024, 12:49:14
Окошко диалоговое создайте.
Между прочим: вы забываете проверять, что пользователь может передумать на каждом запросе и нажать Esc.
Название: Re: Ввод строки пользователем, начинающейся с "("
Отправлено: PuSTaM от 03-10-2024, 12:57:31
Если пользователь жмет Esc, то ничего не вводится, можно ввести только префикс или только суффикс. Зачем его дополнительно проверять?

Спасибо за совет с диалоговым окном, пойду смотреть как его создавать)
Название: Re: Ввод строки пользователем, начинающейся с "("
Отправлено: avc от 03-10-2024, 13:01:56
затем, что ваша программа будет терроризировать пользователя новыми запросами, хотя он давно уже отказался от ввода. Как в анекдоте - "хочешь я расскажу тебе сказку..." ;)
Название: Re: Ввод строки пользователем, начинающейся с "("
Отправлено: Алексей Кулик от 18-10-2024, 20:16:27
В запросе строки стоит добавить возможность использования пробелов.