2009-05-14 7 views
2

マウスの上にカーソルを置いたときにハイライト表示されるカスタムコントロールを作成しました。カスタムコントロールにもチェックボックスがあります。マウスがチェックボックスに移動すると、カスタムコントロールの強調表示は行われません。私はWS_EX_TRANSPARENTをチェックボックスで試してみましたが、それは私のために働いていません。C#を使用したカスタムコントロールの透明なチェックボックス

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

どうすればいいですか?

ありがとうございました

答えて

2

透明はマウスイベントではなく描画にのみ影響します。チェックボックスはマウスイベントを取得しています。これは、チェックボックスにマウスを重ねると、コントロールがMouseLeaveイベントを受け取ることを意味します。子コントロールが(あらゆるレベルで)MouseEnterイベントを取得しても、バックグラウンドカラーが確実に変更されるようにするには、関心のあるコントロール、または子、grand-childなどがマウスオーバーしていることを追跡する必要がありますそれ。これを行うには、すべての子孫コントロールを再帰的に実行し、それらのイベントを傍受します。これを行うには、以下のようなクラスを試してみてください。

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; 
    } 
} 
関連する問題