在用户控件内制作一个标签,使所有鼠标事件都可以点击?

问题描述 投票:0回答:3

我有一个自定义按钮控件。里面显然有一个文本标签,当我点击标签时,它显然不会触发按钮 click、event、mouseenter 或 mouseleave。我需要做的是让标签表现得好像它根本不存在(可点击)。我以前做的事情是:

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

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

c# winforms events user-controls event-handling
3个回答
3
投票

不要使用标签。太痛苦而且太昂贵。重写按钮的 OnPaint() 方法来绘制文本。


0
投票

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

首先将按钮的

FlatStyle
属性设置为
Flat
。这样就消除了鼠标悬停时发生的默认视觉效果。

其次,设置

FlatAppearance.MouseDown and MouseHover
属性(您可以在设计器中完成)您喜欢的颜色。

第三,由于标签没有

FlatAppearance
属性,因此您必须通过挂钩标签的
MouseHover
MouseLeave
事件来手动设置它,并设置您想要的颜色。 (当您没有将鼠标悬停在按钮和标签上时,希望您最初为标签指定与按钮相同的
BackColor
)。

第四,您还应该挂钩 Button

MouseHover
MouseLeave
事件来将标签设置为所需的颜色..

相当黑客..我认为点击部分现在对你来说没问题。


0
投票

一个新的答案是将 css 样式“pointer-events-none”应用于标签,这允许用户单击标签并激活 后面的元素。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.