@KitaYama
With regards your first point on the triple form I simply moved the mouse up code to the mouse down event and disabled the if group part of the code. From force of habit I usually use the mouse up event to 'commit' so users, if they decide they don't want to commit can move the mouse off the control before releasing the button. I see no difference on my machine but glad it makes a difference for you.
For the last section relating to 'triple focus' I did observe that effect you show in your video, however I thought I had solved it by widening the control. There is already a dummy textbox (called txtFocus) to receive the focus but not hidden behind another control (all dimensions are 0 so effectively hidden). However moving it to behind a control did not make a difference for me. Hadn't considered the double click event, so good tip, many thanks.
I thought I had solved it by widening the control since the order of events for controls is Enter>Got Focus - followed then by mousedown whatever. However if the user clicks right on the edge of a control (i.e. on the border, even if not visible) the first two events fire but not mousedown - so the control gets the focus but mousedown has not been triggered to shift the focus. The thinking was that by widening the control the edge would not be close to where the user would be expected to click.
That problem still exists unfortunately. And moving the focus in either of the first two event means the mousedown event does not fire.
But shifting the focus in the click event (as well as double click) does mean the problem does not persist. If you find the edge of the control, click down but don't release, the control has the focus, but loses it as soon as you release. So for the occasional times when a user clicks right on the border, providing they release, they will see a very brief flash. Mousedown is still not triggered so they will need to move the mouse off the border and into the control.
You could move the mousedown code to the click event but you would lose the X/Y parameters so lose the feature to determine the value based on mouse position or go to the extent of using the cursorpos api etc to determine mouse position over the control. Otherwise the user would have to 'step through' the three options. I'll take a look at using the api's in the next few days
Many thanks for your input and feedback