| Subject |
Re: POSSIBLE FIX: pushbutton |
| From |
Andy Taylor <andy.taylor.1959@outlook.com> |
| Date |
Mon, 08 Mar 2021 06:11:44 -0500 |
| Newsgroups |
dbase.getting-started |
Gaetano,
Nice idea Gaetano...
I have been through similar thinking and when I get this sort of multiple unintended call problem
I tend to use elapsed time since the function was last called to see if it should ignore the call or not.
My function
Record time now
Check elapsed time in milliseconds
If over a very small set value
do code
endif
return
Andy
> On 8/03/2021 9:11, edward racht wrote:
> > Greetings,
> >
> > just a question.
> >
> > Would this be the same problem that plagues radiobuttons?
> >
> > The following thread is in 'programming' newsgroup 2/7/2021
> >
> > Here is a solution that worked recently.
> >
> > just for the record, I have finally solved this issue.
> > After marc's solution with the keyboard "{Tab}" which was working
> > pretty fine, a post in this forum way back from 2005, where a user was
> > facing the very same issue with getting focus only at the second
> > click, see attached screen shot.
> > The solution was as simple as good - instead of using the
> > radiobutton's OnChange event, the *OnLeftMouseUp* event was employed.
> > This has brought two other advantages to simplify my code: Now I can
> > do without checking if the event was firing for the radioutton with
> > its value set to true - 'on LeftMouseUp' the radiobutton's value must
> > be TRUE.
> > And OnLeftMouseUp fires just once, just for the radiobutton which was
> > clicked, leaving the other radiobuttons in the group untouched. This
> > helped me in other places as well to straighten the code a good deal.
> >
> > Perhaps this info helps somebody else ....
> >
> > Thanks to everybody here!
> >
> > Kind regards, Heinz
> >
> > see attachment onleftmouseup.png
> >
> if the issue was happening while clicking the button, this could be
> worth exploring, but when clicking the button, it works fine in all
> dBase versions. It's when the accelerator key is used that something
> fires multiple times.
>
> Here is something that seems to fix the issue. You can't control how
> many times an event fires but you can control how many times a
> sub-function runs. You might want to try this with a customer property
> of the for so it gets released when the form closes. @Mervyn, any
> thoughts on what to attach the counter to?
>
> Try this
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 08/03/2021
> //
> parameter bModal
> local f
> f = new ghor38Form()
> if (bModal)
> f.mdi = false // ensure not MDI
> f.readModal()
> else
> f.open()
> endif
>
> class ghor38Form of FORM
> with (this)
> height = 16.0
> left = 77.5
> top = 0.0
> width = 40.0
> text = ""
> endwith
>
> this.PUSHBUTTON1 = new PUSHBUTTON(this)
> with (this.PUSHBUTTON1)
> onClick = class::PUSHBUTTON1_onClick
> height = 1.0909
> left = 13.0
> top = 4.0
> width = 15.2857
> text = "Pu&shbutton1"
> toggle = true
> value=false
> endwith
>
> this.ENTRYFIELD1 = new ENTRYFIELD(this)
> with (this.ENTRYFIELD1)
> height = 1.0
> left = 11.0
> top = 8.0
> width = 8.0
> value = "Entryfield1"
> endwith
>
>
> function displayControlName()
> if _app.nCount>1 // counter was left at 2 with a double-fire,
> reset it
> _app.nCount=null
> elseif type("_app.nCount")=="U" or _app.nCount=null
> ?form.activecontrol.name
> _app.nCount=1
> elseif _app.nCount=1
> _app.nCount++ // make it 2
> elseif _app.nCount=2
> _app.nCount++ // make it 3
> elseif _app.nCount=3
> // gotta reset it at some stage, hopefully it only fires 3
> times
> _app.nCount=null
> endif
> return
>
> function PUSHBUTTON1_onClick()
> form.displayControlName()
> return
> endclass
>
|
|