Всем добрый день!
Сборка 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 попало-таки в блок изменений документа и я смог бы отменить эти свои действия.
Надеюсь на помощь.
Сборка 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 попало-таки в блок изменений документа и я смог бы отменить эти свои действия.
Надеюсь на помощь.