Frage

Ich habe ein benutzerdefiniertes Steuerelement erstellt, die hervorgehoben werden, wenn die Maus darüber bewegt. Die individuelle Steuerung hat auch eine Checkbox. Wenn die Maus über das Kontrollkästchen geht, wird die Hervorhebung des Custom Controls nicht auftreten. Ich habe versucht, mit WS_EX_TRANSPARENT auf die Checkbox, aber es funktioniert nicht für mich.

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

Wie kann ich das tun?

Danke

War es hilfreich?

Lösung

Transparent nur Affekte zeichnen, keine Mausereignisse. Das Kontrollkästchen ist die Mausereignisse bekommen, was wiederum bedeutet, dass, wenn Sie die Maus über das Kontrollkästchen, das Steuerelement empfängt ein Mouseleave-Ereignis. Um sicherzustellen, dass die Hintergrundfarbe ändert, selbst wenn ein Kind Steuerung (auf jeder Ebene) ein MouseEnter- Ereignis bekommt, müssen Sie verfolgen, dass eine Kontrolle von Interesse - oder jedes Kind, Kind grand-..etc-- die Maus hat über es. Dazu Rekursion durch alle Nachkomme Kontrollen und abfangen die entsprechenden Ereignisse für sie. Um dies zu tun, versuchen, etwas ähnlich die Klasse unten.

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top