Information générale
Catégorie:
Gestionnaire d'écran & Écrans
>>>>>I have a form on which I want certain controls to be visible when the value of a checkbox is false.
>>>>>
>>>>>In the refresh method, I have the following code:
>>>>>
>>>>>*refresh
>>>>>
>>>>>if thisform.chkactive.value = .f.
>>>>> thisform.txtin_date.visible = .t.
>>>>> thisform.txtin_date.enabled = .f.
>>>>> thisform.lblin_date.visible = .t.
>>>>>else
>>>>> thisform.txtin_date.visible = .f.
>>>>> thisform.lblin_date.visible = .f.
>>>>>endif
>>>>>
>>>>>In the CmdNext button, I have the following code:
>>>>>
>>>>>IF NOT EOF()
>>>>> Skip
>>>>> thisform.refresh()
>>>>>ENDIF
>>>>>
>>>>>IF EOF()
>>>>> =MESSAGEBOX("This is the last " + THISFORM.recordtype, MSGOKONLY + MSGEXCLAMATION, C_APPNAME)
>>>>> GOTO BOTTOM
>>>>> thisform.Refresh()
>>>>>ENDIF
>>>>>
>>>>>When I move throught the records, the controls become visible one record late. For example, when I get to a record that has a .F. value in the checkbox control, the controls referred to in the refresh method are still not visible. They become visible when I move to the next record. I'm not sure what I'm doing wrong here.
>>>>>
>>>>>AL
>>>>
>>>>Instead of checking the value of the checkbox, try checking the value of its controlsource in your 'if' statement. Checkboxes are really quirky like this, their values often don't get updated automatically. I am confident that not relying on the value of the checkbox will solve your problem.
>>>
>>>Erik, you're right, but it's not just checkboxes. The same thing will happen with textboxes, etc. The reason is in the order of the procedures when you refresh. VFP seems to process the form.refresh code and then each of the controls. I've tried putting dodefault() code in various places, but nothing seems to help.
>>>
>>>(Also, Allen got his answer a second BEFORE you posted it. Clairvoyance?) :-)
>>>
>>>Barbara
>>
>>Also, in such things like Thisform.Refresh() the order of placing controls on the form is important.
>>When you rely on Control1.Value in Control2.Refresh() there is a chance that Control1 was not refreshed yet, so it still keeps the value from previous record.
>>
>>Nick
>
>
>My suggestion is then to
>IF NOT EOF()
> Skip
> thisform.refresh()
> thisform.CtrlRefresh() && add this method which
> * contains the code in your refresh method now.
>ENDIF
You may want to check for EOF() once again between SKIP and REFRESH().
Vlad
Précédent
Répondre
Voir le fil de ce thread
Voir le fil de ce thread à partir de ce message seulement
Voir tous les messages de ce thread
Voir tous les messages de ce thread à partir de ce message seulement