我正在使用从图片框继承的自定义控件来模拟按钮。我有大部分功能,我想要正常工作。我想放一些可以模拟按钮按下的东西。因此,当用户按下按钮时,控件上的图像将发生瞬间发生的事情。 下面的代码是否可以解决这个问题,或者有人建议更好的方法。
是否会使用在x时间之后替换图像的计时器?
谢谢
private void MediaButton_MouseClick(object sender, MouseEventArgs e)
{
this.Image = this.downImage;
this.Invalidate();
this.Refresh();
//Do something
System.Threading.Thread.Sleep(200);
this.Image = this.upImage;
this.Invalidate();
this.Refresh();
}
更新: 这适用于触摸屏设备
答案 0 :(得分:1)
请勿让用户等待睡眠。这可能在前几次很有趣,但它会变得陈旧和烦人。
您可以将Click拆分为MouseDown和MouseUp事件。这使用户可以选择他想要查看每个图像的时间。
答案 1 :(得分:1)
为什么不使用MouseDown和MouseUp事件?然后,您可以模拟按正常按钮时发生的情况。即在MouseDown上将图片更改为其他内容(如按下按钮),然后在鼠标上将其更改回来。
答案 2 :(得分:1)
不,你不想在这里使用Thread.Sleep(xx)
......事实上,几乎每当你看到使用它的代码时,你都可以认为这是错误的,或者至少是一个非常糟糕的主意。您也不需要计时器,因为您不想等待预定的时间。
相反,让用户确定“向下”或“活动”图像的显示时间。将其与MouseDown
和MouseUp
事件同步。引发MouseDown
事件时将图像更改为“向下”或“有效”图像,并将其重置为MouseUp
事件中的原始图像。
private void MediaButton_MouseDown(object sender, MouseEventArgs e)
{
MediaButton.Image = downImage;
}
private void MediaButton_MouseUp(object sender, MouseEventArgs e)
{
MediaButton.Image = upImage;
}
只要用户点击按钮(鼠标按钮在控件上方),就会显示“向下”或“活动”图像,然后在释放鼠标按钮时将其删除。
您可以获得所需的视觉反馈,而不会有任何糟糕的设计。
答案 3 :(得分:1)
未经测试,但似乎更适合在mouseup和mousedown之间拆分代码 这将更好地模拟命令按钮的行为
private void MediaButton_MouseDown(object sender, MouseEventArgs e)
{
this.Image = this.downImage;
this.Invalidate();
this.Refresh();
}
private void MediaButton_MouseUp(object sender, MouseEventArgs e)
{
this.Image = this.upImage;
this.Invalidate();
this.Refresh();
}
答案 4 :(得分:0)
我想补充一点,您可能没有使用WPF(我猜测WinForms),但如果您使用WPF,则可以使用Animations来提供更丰富的用户体验。