在用户控件内制作标签可以点击所有鼠标事件?

时间:2012-04-20 18:47:36

标签: c# winforms events user-controls event-handling

我有自定义按钮控件。文本中显然有一个标签,当我点击标签时,它显然不会触发按钮click,event,mouseenter或mouseleave。我需要做的是让标签行为就像它甚至没有(点击可通过)。我以前做的是:

base.Click += value;
foreach (Control i in Controls) {
    i.Click += value;
}

这曾经工作得很好,但现在我的按钮的标签是每次鼠标盘旋时不同的colco,所以我翻过按钮,它变成一种颜色(让我们说红色),然后我去了标签,它变成绿色,然后回到无标签部分,它的黄色。这看起来很糟糕所以我需要它一起忽略标签。

2 个答案:

答案 0 :(得分:3)

不要使用标签。太痛苦而且太贵了。覆盖按钮的OnPaint()方法以绘制文本。

答案 1 :(得分:0)

有一种方法可以使行为统一,但它可能看起来同样非常规。

首先将按钮的FlatStyle属性设置为Flat。这样就可以消除鼠标悬停时发生的默认视觉效果。

其次,设置FlatAppearance.MouseDown and MouseHover属性(你可以在设计师中设置)你喜欢的颜色。

第三,由于label没有FlatAppearance属性,你必须通过挂钩标签的MouseHoverMouseLeave事件手动设置它,并设置你想要的颜色。 (当你没有鼠标悬停在按钮和标签上时,希望你最初给标签BackColor与按钮相同。)

第四,您还应该挂钩Button MouseHoverMouseLeave事件,以便将标签设置为所需的颜色。

相当hackish ..我认为点击部分现在对你好。