ADN Club > AutoCAD .NET API
Ввод строки пользователем, начинающейся с "("
(1/1)
PuSTaM:
Доброго времени суток.
Пишу программку, которая добавляет в подписи размеров префиксы и суффиксы. У некоторых пользователей есть потребность занести подпись в круглые скобки, но при вводе круглой открывающей круглой скобки автокад переходит в режим ввода lisp'а. Подскажите, пожалуйста, начинающему разработчику, как позволить пользователям ввести в префикс символ "(".
Вот такой код у меня получился на данный момент
--- Код - C# [Выбрать] --- public void ChangeDimText() { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database dB = doc.Database; Editor ed = doc.Editor; TypedValue[] filterListForSelectDimensions = new TypedValue[1]; filterListForSelectDimensions[0] = new TypedValue(0, "DIMENSION"); SelectionFilter filterForSelectDimensions = new SelectionFilter(filterListForSelectDimensions); PromptResult pref = doc.Editor.GetString("\nВведите префикс"); PromptResult suf = doc.Editor.GetString("\nВведите суффикс"); // Starts a new transaction with the Transaction Manager using (Transaction trans = dB.TransactionManager.StartTransaction()) { ed.WriteMessage("\nВыберите размеры для редактирования"); PromptSelectionResult selDim = ed.GetSelection(filterForSelectDimensions); if (selDim.Status != PromptStatus.OK) { ed.WriteMessage("\nНет выбранных объектов"); return; } ObjectIdCollection selectedDimsId = new ObjectIdCollection(selDim.Value.GetObjectIds()); for (int i = 0; i < selectedDimsId.Count; i++) { DBObject exampleOfDim = selectedDimsId[i].GetObject(OpenMode.ForWrite); Dimension dimensionForEdit = exampleOfDim as Dimension; if (dimensionForEdit.DimensionText != "") { string text = dimensionForEdit.DimensionText; if (dimensionForEdit.DimensionText.StartsWith("\\X")) { dimensionForEdit.DimensionText = dimensionForEdit.DimensionText.Insert(2, pref.StringResult) + suf.StringResult; } else dimensionForEdit.DimensionText = pref.StringResult + dimensionForEdit.DimensionText + suf.StringResult; } else { string newPrefix = pref.StringResult + dimensionForEdit.Prefix; dimensionForEdit.Prefix = newPrefix; dimensionForEdit.Suffix += suf.StringResult; } } trans.Commit(); } } }}
avc:
Окошко диалоговое создайте.
Между прочим: вы забываете проверять, что пользователь может передумать на каждом запросе и нажать Esc.
PuSTaM:
Если пользователь жмет Esc, то ничего не вводится, можно ввести только префикс или только суффикс. Зачем его дополнительно проверять?
Спасибо за совет с диалоговым окном, пойду смотреть как его создавать)
avc:
затем, что ваша программа будет терроризировать пользователя новыми запросами, хотя он давно уже отказался от ввода. Как в анекдоте - "хочешь я расскажу тебе сказку..." ;)
Алексей Кулик:
В запросе строки стоит добавить возможность использования пробелов.
Навигация
Перейти к полной версии