سؤال

ولقد خلق عنصر تحكم مخصص أن يحصل على الضوء عند مرور الماوس فوقها. لديه تحكم مخصص أيضا مربع. عندما يذهب الماوس فوق مربع، لا يحدث تسليط الضوء على عنصر التحكم المخصص. لقد حاولت استخدام على WS_EX_TRANSPARENT في مربع ولكنه لا يعمل بالنسبة لي.

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

وكيف يمكنني أن أفعل هذا؟

والشكر

هل كانت مفيدة؟

المحلول

ويؤثر فقط على الرسم لا أحداث الماوس شفافة. خانة الاختيار هو الحصول على أحداث الماوس، وهذا بدوره يعني أنه عند الماوس فوق مربع، تتلقى سيطرتك على الأحداث MouseLeave. للتأكد من أن يتغير لون الخلفية، حتى عندما يكون التحكم التابعة (على أي مستوى) يحصل على الحدث MouseEnter، تحتاج إلى متابعة أن السيطرة على اهتمام - أو أي طفل، والطفل الكبير ..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;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top