Прозрачный флажок в пользовательском элементе управления с использованием C#

StackOverflow https://stackoverflow.com/questions/861061

Вопрос

Я создал собственный элемент управления, который подсвечивается при наведении на него курсора мыши.Пользовательский элемент управления также имеет флажок.При наведении курсора мыши на флажок выделение пользовательского элемента управления не происходит.Я пробовал использовать WS_EX_TRANSPARENT на флажке, но у меня он не работает.

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

Как я могу это сделать?

Спасибо

Это было полезно?

Решение

Прозрачный влияет только на рисование, а не на события мыши.Флажок получает события мыши. Это, в свою очередь, означает, что когда вы наводите курсор мыши на флажок, ваш элемент управления получает событие 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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top