0

我正在使用从图片框继承的自定义控件来模拟按钮。我拥有我想要正常工作的大部分功能。我想放一些东西来模拟按钮按下。这样当用户按下按钮时,控件上的图像会在一瞬间发生变化。下面的代码是否可以解决此问题,或者有人可以提出更好的方法。

它会使用在时间 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();
        }

更新:这是用于触摸屏设备

4

5 回答 5

1

不要使用睡眠让用户等待。前几次这可能很有趣,但它会很快变得陈旧和烦人。

您可以将 Click 拆分为 MouseDown 和 MouseUp 事件。这让用户可以选择他想要查看每个图像的时间。

于 2012-05-18T10:44:08.110 回答
1

为什么不使用 MouseDown 和 MouseUp 事件?然后,您可以模拟按下普通按钮时发生的情况。即在 MouseDown 上将图片更改为其他内容(例如按下的按钮),然后在鼠标向上将其更改回来。

于 2012-05-18T10:45:13.627 回答
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;
}

只要用户单击按钮(将鼠标按钮放在控件上),就会显示“向下”或“活动”图像,然后在释放鼠标按钮时将其删除。

你会得到你正在寻找的那种视觉反馈,而没有任何糟糕的设计。

于 2012-05-18T10:45:33.027 回答
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(); 
} 
于 2012-05-18T10:46:21.503 回答
0

我想补充一点,您可能没有使用 WPF(我猜是 WinForms),但如果您使用 WPF,您可以使用动画来提供更丰富的用户体验。

于 2012-05-18T11:35:08.450 回答