|
Refresh
|
|||
---|---|---|---|
#18+
Объясните такую тонкость Refresh в vpf-9.0 sp2. В хелпе про него написано: Код: plaintext 1. 2. 3. 4. 5.
Насколько я понимаю, тут сказано, что при "рефреше" формы должно происходить обновление всего входящего в форму, кроме неактивных страниц pageframe. Однако, у меня не все обновляется. Например: 1. Назначаем форме новое свойство myVALUE с начальным значением .t. 2. накладываем на форму две commandbutton и один shape и один label. 3. В click первой кнопки пишем Код: plaintext 1.
4. в Enabled второй кнопки пишем: =Thisform.myVALUE 5. "FontBold"-у лейбла присваиваем: =Thisform.myVALUE 6. и, к примеру, в visible "шейпа" пишем то же самое: =Thisform.myVALUE. Итак, при нажатии первой кнопки вторая кнопка должна деактивироваться, лейбл "похудеть", а Shape вообще исчезнуть. Однако, этого не происходит. Исчезновение, "похудание" и деактивация происходят только если в click первой кнопки прописать персональное обращение: Код: plaintext 1. 2.
Объясните, pls, отчего Thisform.Refresh не "рефрешит" все свои контролы? Или им до фени свойства формы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 19:50 |
|
Refresh
|
|||
---|---|---|---|
#18+
Sorry, ачепятка... Последний код должен выглядеть так: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 19:57 |
|
Refresh
|
|||
---|---|---|---|
#18+
Вы путаете понятия "ссылка" и "значение". Когда Вы даете команду вроде Код: plaintext
То Вы присваиваете свойству Enabled то значение свойства myVALUE которое есть сейчас. Именно на момент присвоения. После выполнения этой команды свойство Enabled "забывает" про свойство myVALUE. Оно уже получило от него все, что необходимо. Получило значение. Теперь Вы можете менять значение свойства myVALUE сколько угодно и на что угодно, но на свойство Enabled это не повлияет никак. Между этими свойствами просто не осталось никакой связи. Если Вы хотите "обновить" значение свойства Eanbled актуальным значением свойства myValue, Вам придется в принудительном порядке снова дать команду на присвоение. В FoxPro нет возможности в качестве значения свойства указать ссылку на другое свойство (исключение - это ссылка на объект). До некоторой степени автоматизировать весь этот процесс помогает метод X_Assign(). Т.е. когда Вы создаете свое свойство MyValue, то в окне настройки есть такая птичка "Assign Method". Если ее установить, то будет создан метод с именем MyValue_Assign() Этот метод будет срабатывать каждый раз при программном изменении значения свойства MyValue. Соответственно, в этом методе и следует прописать все присвоения. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 21:10 |
|
Refresh
|
|||
---|---|---|---|
#18+
Спасибо Владимиру за подробный ответ. Но с этим методом X_assign() мне не понравилось. В сущности, получается, что вместо того, чтобы обойтись вывешиванием единственного объявления о том, что всем контролам следует перестроиться(т.е. изменить myVALUE и забыть), я должен перепоручать это занятие другому лицу. И это будет даже не простая объява, но уже с его стороны, а рассылка писем счастья каждому контролу. В сущности, это я мог сделать и в своем click первой кнопки. Вместо привлечения посредника x_assign(), я сам мог разослать приказы контролам непосредственно из click-a первой кнопки. Мда.... У меня слишком много однотипных контролов будет, причем переменное количество, чтобы по каждому поводу лезть в этот x_assign() и добавлять ручками приказы... Однако, благодаря вашему ответу я смекнул, что автоматизировать можно иначе. При создании каждого контрола в его собственный Refresh следует вставить строчку типа: Код: plaintext
По-моему, так было бы правильнее. Тем более, что работает. :) Еще раз спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 22:32 |
|
Refresh
|
|||
---|---|---|---|
#18+
tansoc Однако, благодаря вашему ответу я смекнул, что автоматизировать можно иначе. При создании каждого контрола в его собственный Refresh следует вставить строчку типа: Код: plaintext
По-моему, так было бы правильнее. Тем более, что работает. :) Собственно, это один из стандартных способов автоматической верификации объектов, основанный на том факте, что вызов метода Refresh() объекта-контейнера вызывает методы Refresh() всех вложенных в него объектов. Возможно, будет полезным еще метод SetAll(), который позволяет присвоить одно и то же значение одноименному свойству всех объектов одного класса-родителя, вложенных в объект-контейнер. Правда, его недостаток (как и достоинство) в "глобальности" охвата. Невозможно сделать присвоение "всем кроме". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 23:46 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1585523]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 330ms |
total: | 465ms |
0 / 0 |