开发者

WinForms equivalent of WPF's IsHitTestVisible

I have a button override that has a Label as a child. I have MouseEnter and Leave events attached to the button control.

When the mouse ent开发者_如何转开发ers the label the button's events are nullified (which is natural). My question is how can I disable the label's hit testing without actually disabling the label.

I want it to retain it's color and I want it to be able to change colors (MouseEnter on button for example), but when the mouse is over the label, the hit test to be considered on the button.

P.S: I know I can add Mouse Enter and Leave on the Label and handle those cases but I want the control to be self sufficient such that if the parameters change outside of it (the colors on mouse enter and leave), the control will still function properly.


Ran across this question while looking for other information and don't believe the accepted answer is really correct.

You can extend the label and alter the hittest response in WndProc. Something along these lines:

public class HTTransparentLabel : Label
{
    private const int WM_NCHITTEST = 0x84; 
    private const int HTTRANSPARENT = -1; 

    protected override void WndProc(ref Message message) 
    { 
        if ( message.Msg == (int)WM_NCHITTEST ) 
            message.Result = (IntPtr)HTTRANSPARENT; 
        else 
            base.WndProc( ref message ); 
    }
}


The short answer is that you cannot. Both the button and the label are in fact windows, so when the mouse leave one for the other, mouseenter and mouseleave events are generated.

The real question is, why do you need a label on a button?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜