Pregunta

He creado un control personalizado que obtiene resaltado cuando el ratón pasa sobre ella. El control personalizado también tiene una casilla de verificación. Cuando el ratón pasa sobre la casilla de verificación, no se produce el resaltado del control personalizado. He intentado usar WS_EX_TRANSPARENT en la casilla pero no está funcionando para mí.

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

¿Cómo puedo hacer esto?

Gracias

¿Fue útil?

Solución

sólo afecta dibujo, no transparentes eventos de ratón. La casilla de verificación está recibiendo los eventos de ratón, esto a su vez significa que al pasar el ratón sobre la casilla de verificación, el control recibe un evento MouseLeave. Para asegurar que los cambios de color de fondo, incluso cuando un control secundario (a cualquier nivel) consigue un evento MouseEnter, es necesario realizar un seguimiento de que un control de intereses - o cualquier niño, Grand-hijo ..etc-- tiene el ratón sobre eso. Para ello, recursivo a través de todos los controles y descendiente interceptar los eventos adecuados para ellos. Para ello, trata de algo similar a la clase a continuación.

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top