我有一个自定义按钮控件。里面显然有一个文本标签,当我点击标签时,它显然不会触发按钮 click、event、mouseenter 或 mouseleave。我需要做的是让标签表现得好像它根本不存在(可点击)。我以前做的事情是:
base.Click += value;
foreach (Control i in Controls) {
i.Click += value;
}
这曾经工作得很好,但现在每次鼠标悬停在按钮上时,我的按钮标签都是不同的 colco,所以我越过按钮,它变成一种颜色(可以说是红色),然后我越过标签并它变成绿色,然后回到无标签部分,变成黄色。这看起来很糟糕,所以我需要它来忽略标签。
不要使用标签。太痛苦而且太昂贵。重写按钮的 OnPaint() 方法来绘制文本。
有一种方法可以使行为统一,但它可能看起来同样不传统。
首先将按钮的
FlatStyle
属性设置为Flat
。这样就消除了鼠标悬停时发生的默认视觉效果。
其次,设置
FlatAppearance.MouseDown and MouseHover
属性(您可以在设计器中完成)您喜欢的颜色。
第三,由于标签没有
FlatAppearance
属性,因此您必须通过挂钩标签的 MouseHover
和 MouseLeave
事件来手动设置它,并设置您想要的颜色。 (当您没有将鼠标悬停在按钮和标签上时,希望您最初为标签指定与按钮相同的 BackColor
)。
第四,您还应该挂钩 Button
MouseHover
和 MouseLeave
事件来将标签设置为所需的颜色..
相当黑客..我认为点击部分现在对你来说没问题。
一个新的答案是将 css 样式“pointer-events-none”应用于标签,这允许用户单击标签并激活 后面的元素。