Ввод строки пользователем, начинающейся с "("

Автор Тема: Ввод строки пользователем, начинающейся с "("  (Прочитано 2549 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Доброго времени суток.
Пишу программку, которая добавляет в подписи размеров префиксы и суффиксы. У некоторых пользователей есть потребность занести подпись в круглые скобки, но при вводе круглой открывающей круглой скобки автокад переходит в режим ввода 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. }
« Последнее редактирование: 03-10-2024, 13:37:32 от Александр Ривилис »

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Окошко диалоговое создайте.
Между прочим: вы забываете проверять, что пользователь может передумать на каждом запросе и нажать Esc.

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

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Если пользователь жмет Esc, то ничего не вводится, можно ввести только префикс или только суффикс. Зачем его дополнительно проверять?

Спасибо за совет с диалоговым окном, пойду смотреть как его создавать)

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
затем, что ваша программа будет терроризировать пользователя новыми запросами, хотя он давно уже отказался от ввода. Как в анекдоте - "хочешь я расскажу тебе сказку..." ;)

Отмечено как Решение PuSTaM 18-10-2024, 21:14:29

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
В запросе строки стоит добавить возможность использования пробелов.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!