在鼠标单击时更改图片框上的图像以向用户提供一些反馈

时间:2012-05-18 10:41:33

标签: c# mouseevent

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

是否会使用在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();
        }

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

不,你不想在这里使用Thread.Sleep(xx) ......事实上,几乎每当你看到使用它的代码时,你都可以认为这是错误的,或者至少是一个非常糟糕的主意。您也不需要计时器,因为您不想等待预定的时间。

相反,让用户确定“向下”或“活动”图像的显示时间。将其与MouseDownMouseUp事件同步。引发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来提供更丰富的用户体验。