FillForegnd в Shapesheet, используя неверные данные

270
AJD

У меня проблема, связанная с работой, и поэтому я не могу прикрепить файл примера.

Я использую динамические формы как часть диаграммы, где пользователь может изменить данные формы (т.е. изменить категорию), и форма изменит цвет. Механика для этого в ShapeSheet.

Ключевым элементом данных (Prop.Category) является индекс из фиксированного списка параметров. Пользовательское поле (User.ForeColour) использует данные Prop.Category для определения значения цвета RGB из другого фиксированного списка (другой формулы индекса / поиска). У меня есть FillForegnd для прямого доступа к User.ForeColour.

В моем примере здесь пользователь выбирает Prop.Category # 3, который косвенно устанавливает User.ForeColour в RGB (128,0,128). Однако в моей текущей настройке файла FillForegnd тогда установлен в RGB (64,86,150). Когда я выбираю другие категории, значения FillForegnd также изменяются от ожидаемого значения.

Я проверил ShapeSheet, используя формула и представление значений. Все правильно (за исключением конечного значения в FillForegnd). Двойная проверка User.ForeColour показывает, что он содержит значение RGB (128,0,128), как и ожидалось.

Интересно, что если я перезаписываю формулу в User.ForeColour со статическим значением RGB (128,0,128), FillForegnd заполняется правильно, а форма показывает правильный цвет. Возвратитесь к формуле (которая все еще заканчивается в правильном значении), и FillForegnd снова заполняется с неправильным значением RGB.

Я проверил и удалил темы, это не имело никакого эффекта.

Visio 2010, Сетевая среда Windows 7.

Я пытался продублировать проблему в новом файле в другой системе (чтобы я мог получить загружаемый пример), но безуспешно. Файл с оригинальной главной формой все еще работает как ожидалось. Новый файл с скопированными фигурами (и по умолчанию копируемый мастер) - это файл с проблемами. Я дважды проверил ShapeSheet, и настройки по умолчанию / master соответствуют ожиданиям (черный текст), а настраиваемые параметры (синий текст) соответствуют ожиданиям.

0
[Из моего удаленного кросс-поста из @JohnGoldsmith] Привет, немного сложно посмотреть, что здесь происходит. Можете ли вы повторить проблему в нечувствительном документе? Если вы можете, то я бы опубликовал ваш вопрос на visguy.com/vgforum/index.php, где вы можете прикреплять файлы к темам. - Джон Голдсмит AJD 6 лет назад 0
для тех, кто заинтересован, я разместил этот вопрос по адресу http://visguy.com/vgforum/index.php?topic=8205.0 и отправлю ответ здесь, если я когда-нибудь добьюсь успеха. AJD 6 лет назад 0

1 ответ на вопрос

0
AJD

Хорошие люди на форумах visguy предоставили достаточно информации, чтобы решить вопрос, который я здесь поставил.

User.ForecolourСвойство используется формула ( INDEX(...)) для определения требуемого значения цвета. Такое использование формулы плохо сочеталось с FillForegndклеткой.

Существуют три простых решения. Оба решения используют SETF(...)вместо указания FillForegnd на формулу.

  1. User.ForecolourСвойство можно использовать SETF(GetRef(FillForegnd),INDEX(...)). Это приведет к значению FillForegndи является самой простой модификацией исходного кода. Недостатком является то, что любые пользовательские изменения самой фигуры будут перезаписывать FillForegndячейку, которая не будет исправлена, пока пользователь снова не выберет правильные данные формы.
  2. Можно создать дополнительную User.Xячейку. SETFВ ответе-бы GetRef(User.X)вместо этого. FillForegndбудет содержать Guard(User.X). Это остановит пользователей, случайно меняющих цвета.
  3. Третий вариант расширяет оба предыдущих ответа. В User.ForeColour: =SETF(GetRef(FillForegnd),"GUARD(INDEX(...))"). Это установит GUARDнеобходимый цвет в области переднего плана.

Все эти решения используют характеристику, которая SETFможет перезаписывать ячейки, которые имеют GUARD, но обычное пользовательское вмешательство в GUI (область страницы фигур) не может.

Похожие вопросы