1

Label を子として持つボタンのオーバーライドがあります。ボタン コントロールに MouseEnter イベントと Leave イベントが関連付けられています。

マウスがラベルに入ると、ボタンのイベントは無効になります (これは当然のことです)。私の質問は、ラベルを実際に無効にすることなく、ラベルのヒット テストを無効にする方法です。

色を保持し、色を変更できるようにしたい (たとえば、ボタンの MouseEnter) が、マウスがラベルの上にあるときは、ボタンでヒット テストが考慮されます。

PS: ラベルに Mouse Enter と Leave を追加してそれらのケースを処理できることはわかっていますが、コントロールを自己完結型にして、パラメーターがその外側で変更された場合 (マウスの入力と終了の色)、コントロールが引き続き動作するようにしたいと考えています。適切に機能します。

4

2 に答える 2

4

他の情報を探しているときにこの質問に遭遇し、受け入れられた答えが本当に正しいとは思わない.

ラベルを拡張し、WndProc でヒットテストの応答を変更できます。これらの行に沿ったもの:

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 ); 
    }
}
于 2012-06-15T01:47:17.283 に答える
1

短い答えは、あなたができないということです。ボタンとラベルはどちらも実際にはウィンドウであるため、マウスが別の場所に移動すると、mouseenter および mouseleave イベントが生成されます。

本当の問題は、なぜボタンにラベルが必要なのかということです。

于 2011-03-02T12:01:52.173 に答える