2

マウスをその上に置いたときに強調表示されるカスタムコントロールを作成しました。カスタムコントロールにもチェックボックスがあります。マウスがチェックボックスの上に移動しても、カスタムコントロールの強調表示は行われません。チェックボックスでWS_EX_TRANSPARENTを使用してみましたが、機能しません。

        int cbStyle = GetWindowLong(CompletedCheckBox.Handle, GWL_EXSTYLE);
        SetWindowLong(CompletedCheckBox.Handle, GWL_EXSTYLE, cbStyle | WS_EX_TRANSPARENT);

これどうやってするの?

ありがとう

4

1 に答える 1

2

透明は描画にのみ影響し、マウスイベントには影響しません。チェックボックスはマウスイベントを取得しています。これは、チェックボックスにマウスを合わせると、コントロールがMouseLeaveイベントを受信することを意味します。子コントロール(任意のレベル)がMouseEnterイベントを取得した場合でも、背景色を確実に変更するには、対象のコントロール(または子、孫など)がマウスを上に置いていることを追跡する必要があります。それ。これを行うには、すべての子孫コントロールを繰り返し、それらに適切なイベントをインターセプトします。これを行うには、以下のクラスのようなものを試してください。

public partial class MyControl : UserControl
{
    public MyControl()
    {
        InitializeComponent();
        AttachMouseEnterToChildControls(this);
    }

    void AttachMouseEnterToChildControls(Control con)
    {
        foreach (Control c in con.Controls)
        {
            c.MouseEnter += new EventHandler(control_MouseEnter);
            c.MouseLeave += new EventHandler(control_MouseLeave);
            AttachMouseEnterToChildControls(c);
        }
    }
    private void control_MouseEnter(object sender, EventArgs e)
    {
        this.BackColor = Color.AliceBlue;
    }

    private void control_MouseLeave(object sender, EventArgs e)
    {
        this.BackColor = SystemColors.Control;
    }
}
于 2009-11-26T04:49:43.780 に答える