【发布时间】:2009-09-30 13:41:04
【问题描述】:
所以我正在开发一个支持编辑的基本标签子类。编辑部分工作正常——我在单击时插入一个没有背景颜色或边框的文本框,在输入时提交更改或失去焦点。
给我带来麻烦的小事与一些基本的字体样式有关。标签是用 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)
我试过了,问题就来了。您之前的当前版本是我为解决问题所做的尝试。
【问题讨论】:
-
我很难过。另外,也许你应该重写 OnFontChanged 并缓存他带下划线和非下划线的字体,这样你就不必每次鼠标悬停在它上面时都创建一个新的字体。
-
不知道这是否与您的问题有关,但您应该避免大量创建新的字体对象。而是创建您希望使用的 2 个不同的字体实例并在它们之间切换。
-
你们是说我应该避免每次悬停时都创建新字体吗?那是因为它是一项昂贵的运行时操作吗?
-
这是因为 Font 对象是限制在某个最大值的 Windows 资源。即使您的字体对象在离开处理函数后超出范围,实际的 windows 资源也可能不会立即释放。
-
绝对是一个好点——谢谢你的提示。
标签: c# .net winforms events user-interface