>>In this case, I have a suggestion: create a form property and bind your control to it. Then in the event of the PK change (which you would control anyway) change this value to whatever you want. This way the code to change the value runs only when it needs to, not on every refresh.
>
>My line from above "I also store the 'last' PK value to the textbox property and only Seek when this PK value changes. " indicates that 'my' code in refresh indeed runs only when PK value changes. Also, you assume that I control the event of the PK change but it is not so. User can move the record pointer in many places (which changes the PK value). Another thing is I want this class I created to work in any form and not to have to bind each one to a form property. That is, I want all 'my' code to be in just one place - Refresh method - and that is all.
If user does something, your code reacts to it and assigns the value to this property. You have a choice of bindevent() to the things user may do, or having an _assign method for this property etc. There are ways to avoid having the code in .refresh() doing any checking.