views:

734

answers:

3

I have a .NET 2.0 WinForms application with a ToolStrip on my main form. Sometimes, the ToolStrip icons don't resppond to the first mouse click, so I have to click the icon twice. It's just a standard ToolStrip with several icons and tooltip texts, I don't do anything special. Is this common?

A: 

I've had that in other dev environments (VB6), and it turned out to be because the first click was being absorbed by the toolbar to acquire the focus. Or, to put it another way, the toolbar wouldn't respond to a click until it had the focus. To test this, try clicking on an empty part of the toolbar before you click on the button. If you never have to click twice on the button after you've clicked on the toolbar then that might be the problem. I think they I got around it (and this was years ago, so please excuse the hack) was to programatically give the focus to the toolbar in the MouseOver event.

gkrogers
Thanks, anyway it seems that this is not my case. If I set focus to another control (let's say a button outside the ToolStrip) and then click on a ToolStrip button, the click is accepted.
A: 

If the application window hasn’t got the focus, you have to click the ToolStrip button twice. The first click sets the focus to the window, the second raises the click event. This is (unfortunately) the default behaviour and it’s by design. Microsoft Word shows the same behaviour (even though the .NET ToolStrip is not the same control).

There is a difference between MS Word and the .NET ToolStrip buttons: when the Word application does not have the focus, the menus and symbols in Word are not highlighted by the mouse cursor. They are only highlighted when Word has the focus. On the other hand, the .NET ToolStrip highlights its buttons even when the application does not have the focus, pretendings that a mouse click would activate the button immediately.
Doc Brown
+2  A: 

I had the same problem some times ago, and I found here a solution. The idea is to overwrite 'WndProc' in a derived class ToolStripEx.

Doc Brown