原始代码来源于以下答案:
How to animate dots in UserControl Paint event?
private void DotsTimer_Tick(object sender, EventArgs e)
{
currentDot += 1;
currentDot %= m_NumberOfDots;
dotsTimer.Interval = TimerInterval;
Invalidate();
}
我希望当我在form 1设计器中拖动控件(例如m_DotColor
)时显示interval属性。
这一行会在DotsTimer_Tick
事件中产生问题:
dotsTimer.Interval = TimerInterval;
但是当我现在将控件拖到窗体设计器中时,整个项目冻结关闭,VisualStudio重新开始并再次加载项目。
PropertyGrid的屏幕快照,不包含tick事件中的间隔部分。
我从Tick
事件中删除了这条线。在属性中,点颜色和点活动颜色列在属性中;我想以同样的方式更改间隔值。
form 1设计器上控件的屏幕快照:
现在我可以在运行程序之前改变DotActiveColor
和DotColor
的颜色了!同样的,我想在运行程序之前改变计时器的速度。
1条答案
按热度按时间92dk7w1h1#
如果要在设计器中查看动画的效果,可以添加一个允许在设计时启动/停止计时器的公共属性。
请注意,必须将属性的支持字段初始化为设置为
DefaultValue
的值,如下所示:DefaultValue
属性不设置Field,如果属性值与设置为 default 的值匹配,它将阻止属性值的序列化。我添加了一个可以在PropertyGrid中设置的
AnimationEnabled
公共属性,以便根据需要启动和停止动画。不要在UserControl的构造函数中启动计时器。如果希望在首次创建UserControl时(将其放在窗体上时)看到动画,可以使用
OnHandleCreated()
重写。即,在UC具有句柄之前不要启动计时器。此外,System.Windows.Forms.Timer有一个
official
的最大分辨率(最小Interval
)55ms
,虽然它可以工作在35ms
。在55ms
它已经是一个相当快的动画无论如何。这是它在设计阶段的外观:
启动/停止计时器并更改间隔