【发布时间】:2015-03-31 23:18:17
【问题描述】:
我正在开发一个自定义 winforms 控件,该控件公开了许多影响控件外观的属性(背景、文本的不同颜色以及悬停、单击以及图标等不同状态的不同颜色)。对这些属性之一的更改需要重新绘制,因此目前每个属性都有一个 getter 和 setter,setter 调用 Invalidate()。这对代码来说非常烦人,如果一次更改多个属性,每个属性都会导致重新绘制,即使最后一次重新绘制就足够了。
我有以下想法,但我不知道它们是否可行或如何实施:
- 缓存属性更改几毫秒,然后
Invalidate() - 使用某种反射来检测调用者是否要更改下一行中的另一个属性,如果是,则延迟调用
Invalidate() - 可能是在需要重绘的属性之前的一些属性,或者是在编译时扩展为 getter/setter 的所有此类属性的列表
如果这些想法有意义/可行,您能否给我一些建议,并指出如何实施它们?
【问题讨论】:
-
如果同时更改多个属性, ??你的意思是代码,而不是用户?为此可以使用 Suspend/ResumeLayout,不是吗?
-
@TaW 是的,我的意思是代码。我不知道暂停/恢复布局,我会调查的。谢谢!
标签: c# winforms custom-controls