Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Свойство LineText.TextValue, Как задать его правильно
 
Всем добрый день!
Сборка T-Flex 10.0.57.0
Есть у меня 1 выбранный пользователем в окне строчный текст:
LineText lt = doc.Selection.GetAt(0);
Когда я меняю цвет этого текста наглым образом, без открытия блока изменений документа:
...
1 Parameter c = new Parameter(12); //Ярко-красный цвет
2 lt.Color = c;
....
Результат: при выполнении строки 2 выдаётся ошибка:
"Необрабатываемое исключение в компоненте приложения. ...
Объект не может быть изменён. Не открыт блок отмены действий."
Файл *.txt с доп. информацией прикладываю к посту.
Как только делаю
doc.BeginChanges("Установка цвета");
Parameter c = new Parameter(12); //Ярко-красный цвет
lt.Color = c;
doc.EndChanges();
то всё здорово и прекрасно работает, отмена изменений происходит корректно, цвета возвращаются на исходные.
Теперь я хочу изменить подобным образом свойство lt.TextValue. Согласно руководству по API оно доступно для записи. Не открывая блок изменений документа я делаю следующее:
...
string str = "Изменённый текст";
lt.TextValue = str;
...
Результат: никаких исключений не выдаётся, выбранный текст изменяет значение, это отображается в 2D-окне TFlex'а, захожу в свойства текста - там тоже строка = "Изменённый текст".
НО: в блоке изменений документа никаких записей нет, отменить изменение невозможно.
Дальше делаю так:
...
doc.BeginChanges("Изменение текста");
string str = "Изменённый текст";
lt.TextValue = str;
doc.EndChanges();
...
Результат: никаких исключений не выдаётся, в 2D-окне TFlex'а текст не показыват того, что он изменился, визуально значение осталось прежним, захожу в свойства текста - там строка = "Изменённый текст".
Вид текста с новым значением TextValue корректно отображается только после полного пересчёта комадой 3RG: Произвести полный пересчёт модели.
НО: по-прежнему в блоке изменений документа никаких записей нет, отменить изменение невозможно.
Вопросы:
1. (любопытно) Почему я смог без открытия блока изменений документа поменять значение свойства lt.TextValue и ничего не случилось?
2. (очень нужно) Как изменить свойство lt.TextValue таким образом, чтобы и текст визуально отобразился сразу по-человечески без команды 3RG, и, что гораздо важнее, чтобы изменение lt.TextValue попало-таки в блок изменений документа и я смог бы отменить эти свои действия.
Надеюсь на помощь.
 
Решил вопрос следующим образом:
1. открываю блок изменений документа doc.BeginChanges("Изменение текста");
2. меняю цвет текста на другой и возвращаю обратно
LineText lt = doc.Selection.GetAt(0) as LineText;
Parameter cOld = lt.Color;
Parameter cNew = lt.Color;
cNew.Value++;
if (cNew.Value > 255) cNew.Value = 255;
lt.Color = cNew; //Устанавливаем новый цвет. Судя по всему, в этот момент
//T-Flex фиксирует изменение этого конкретного объекта-текста
lt.Color = cOld; //Возвращаем прежний цвет
lt.TextValue = "Изменённый текст";
doc.EndChanges();
При таком подходе изменения строки TextValue, "подталкиваемые" предварительным изменением цвета корректно запоминаются в блоке изменений текста. Команды "Отменить"-"Повторить" работают нормально.
Страницы: 1