>>Whenever a container has code in it's REFRESH(), all the controls in it get REFRESH()ed twice. Once during the DODEFAULT() in the Container.REFRESH() code and again when the Container.REFRESH() ends. Which means that a textbox in a container in a container in a form gets REFRESH()ed 8 times if the Form.REFRESH() has code and each of the containers have code.
>>
>>I'm looking for a way to eliminate the redundant REFRESH()es.
>>
>>I'm thinking of putting a test in the base classes of all controls that determines if it was called with DODEFAULT() or not, and if so NODEFAULT.
>>This means I have to figure out how to determine if DODEFAULT() called it.
>>Any ideas?
>>
>>Or maybe a better way to eliminate the duplicate REFRESH()ing?
>>
>>TIA
>
>Hi Bill,
>
>Try the following will avoid doubble fire
>
>...
>DODEFAULT()
>NODEFAULT
>...
>
>in your container.
>
>but this will not resolve the problem with a box called from a container and do on
>
>If you need to call one refresh out of the next you need to block it at the topmost Refresh, so that the refresh called from there will not fire.
>
>I do the follow for things similar to this problem:
>
>I create a new property to the Form, lets' say "glRefresh"
>In each and every of the modified refresh event's I need to modify
>
>LOCAL;
> llThisLocks
>
>IF EMPTY(THISFORM.glRefresh) THEN
> THISFORM.glRefresh = .T.
> llThisLocks = .T.
>ELSE
> llThisLocks = .F.
> NODEFAULT
>ENDIF
>...
>*eventcode example:
>DODEFAULT()
>THIS.txt.REFRESH()
>...
>IF llThisLocks THEN
> THISFORM.glRefresh = .F.
>ENDIF llThisLocks
>
>
>But there is one other thing to say:
>It is allways a good idea to remove code from REFRESH() event and put it in a custom method.
>REFRESH will be called under a lot of circumstances and code inside it can real slow down your forms.
>
>The most settings I need to do are depending on recordchange, activate of a form, not on REFRESH.
>
>HTH
>Agnes
As it turns out, I had a redundant DODEFAULT() in my base classes. When I originally set up my base classes, I thought I needed a DODEFAULT() if I wanted the default action to occur. I just got around to re-visiting those classes and discovered the duplication.
Thanks for helping me find it.
Bill Morris