Прозрачный флажок в пользовательском элементе управления с использованием C # - PullRequest
2 голосов
/ 14 мая 2009

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

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

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

Спасибо

1 Ответ

2 голосов
/ 26 ноября 2009

Прозрачность влияет только на рисование, а не на события мыши. Флажок получает события мыши, это, в свою очередь, означает, что когда вы наводите курсор мыши на этот флажок, ваш элемент управления получает событие MouseLeave. Чтобы гарантировать, что цвет фона меняется, даже когда дочерний элемент управления (на любом уровне) получает событие MouseEnter, вам нужно отследить, что интересующий элемент управления - или любой дочерний элемент, grand-child ..etc--, наведен на мышь Это. Чтобы сделать это, пройти через все элементы управления потомка и перехватить соответствующие события для них. Для этого попробуйте что-то похожее на класс ниже.

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;
    }
}
...