所以我正在研究支持编辑的Label的基本子类。编辑部分工作正常 - 我在插入时插入没有背景颜色或边框的文本框,在输入或失去焦点时提交更改。
给我带来麻烦的小东西与一些基本的字体样式有关。标签是使用MouseHover事件(如超链接)下划线,然后丢失下划线。大多数情况下,它都有效,但偶尔,MouseHover会导致字体恢复为Winforms默认值 - 8pt sans-serif - 而不是执行操作。
这是事件处理程序:
void BWEditableLabel_MouseHover(object sender, EventArgs e)
{
_fontBeforeHover = Font;
Font hoverFont = new Font(
_fontBeforeHover.FontFamily.Name,
_fontBeforeHover.Size,
_fontBeforeHover.Style | FontStyle.Underline
);
Font = hoverFont;
}
有些人可能会发现最后一行并不是简单地说:
Font = new Font(Font, Font.Style | FontStyle.Underline)
我试过了,问题出现了。您之前的当前版本是我为解决此问题而尝试的。
答案 0 :(得分:0)
如果您使用MouseEnter和MouseLeave事件怎么办? MouseEnter将其设置为带下划线,MouseLeave将其还原。
答案 1 :(得分:0)
我想我解决了它,虽然它感觉像是一个补丁而不是最干净的解决方案。我取消了_fontBeforeHover
并创建了_originalFont
。然后我覆盖了标签的Font
属性,并在setter中将_originalFont
设置为标签的设置。然后,在我的MouseHover
和MouseLeave
事件中,我使用了一种新方法SetFont()
来更改字体。在SetFont()
中,我指定base.Font
而不是使用重写的属性。如果我使用了被覆盖的属性,我总是将_originalFont
重新分配给在事件期间更改标签字体的任何内容。
如果我不需要所有额外的代码,肯定会很好,但是: - )
我绝对愿意接受更多建议。
答案 2 :(得分:0)
很抱歉双重答案,但也许你可能想考虑在paint事件中通过DrawString自己绘制文本,这样你就不会设置Font属性。除非明确设置,否则Font属性从Parent的字体中获取它的值。
答案 3 :(得分:0)
在您的用户控件上为您的控件创建一个mousehover事件,像这样(或其他事件类型)
private void picBoxThumb_MouseHover(object sender, EventArgs e)
{
// Call Parent OnMouseHover Event
OnMouseHover(EventArgs.Empty);
}
在承载UserControl的WinFrom上,UserControl处理MouseOver
this.thumbImage1.MouseHover += new System.EventHandler(this.ThumbnailMouseHover);
在WinForm上调用此方法
private void ThumbnailMouseHover(object sender, EventArgs e)
{
ThumbImage thumb = (ThumbImage) sender;
}
ThumbUmage是usercontrol的类型