C# 通过鼠标点击改变图片框上的图像,给用户一些反馈

C# 通过鼠标点击改变图片框上的图像,给用户一些反馈,c#,mouseevent,C#,Mouseevent,我正在使用从图片框继承的自定义控件来模拟按钮。我有我想要的大部分功能正常工作。我想在里面放点东西,模拟按下按钮。因此,当用户按下按钮时,控件上的图像会在瞬间发生变化。 下面的代码是解决这个问题的好方法,还是有人能推荐一个更好的方法 它会使用计时器在时间x或类似的时间之后替换图像吗 谢谢 private void MediaButton_MouseClick(object sender, MouseEventArgs e) { this.Image = t

我正在使用从图片框继承的自定义控件来模拟按钮。我有我想要的大部分功能正常工作。我想在里面放点东西,模拟按下按钮。因此,当用户按下按钮时,控件上的图像会在瞬间发生变化。 下面的代码是解决这个问题的好方法,还是有人能推荐一个更好的方法

它会使用计时器在时间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();
        }
更新:
这适用于触摸屏设备

不要使用睡眠让用户等待。这可能是有趣的头几次,但它会变老和恼人的速度


您可以将单击拆分为MouseDown和MouseUp事件。这可以让用户选择看每张图像的时间。

不要使用睡眠让用户等待。这可能是有趣的头几次,但它会变老和恼人的速度


您可以将单击拆分为MouseDown和MouseUp事件。这让用户可以选择查看每张图像的时间。

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

为什么不使用鼠标向下和鼠标向上移动事件?然后,您可以模拟当您按下普通按钮时发生的情况。也就是说,鼠标向下将图片更改为其他内容(如按下的按钮),然后鼠标向上将图片更改回原来的位置。

不,您不想使用
线程。这里是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;
}
只要用户单击按钮(将鼠标按钮放在控件上),就会显示“向下”或“活动”图像,然后在释放鼠标按钮时将其删除


你会得到你想要的那种视觉反馈,没有任何糟糕的设计。

不,你不想在这里使用
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;
}
只要用户单击按钮(将鼠标按钮放在控件上),就会显示“向下”或“活动”图像,然后在释放鼠标按钮时将其删除


你得到了你想要的视觉反馈,没有任何不好的设计。

未经测试,但似乎更适合在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(); 
} 

未测试,但似乎更适合在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(); 
} 

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

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

好的,很多建议使用鼠标向下和鼠标向上。我们将对此进行测试,看看它是如何工作的。我将sleep值改为50,它似乎正是我想要它做的,这只是为了让用户知道按钮实际上已经按下。好的,很多建议使用鼠标上下移动。我们将对此进行测试,看看它是如何工作的。我将sleep值改为50,它似乎正是我想要它做的,这只是为了让用户知道按钮实际上已经被按下。感谢您的快速响应。这并不是为了给用户一个查看图像的机会,而是为了向他们提供按钮被按下的反馈。您认为用户会注意到是否有5000毫秒的睡眠时间吗?谢谢您的快速响应。这并不是为了给用户一个查看图像的机会,而是为了向他们提供按钮被按下的反馈。你认为用户会注意到是否有5000毫秒的睡眠时间吗?这正是我希望达到的效果,我会测试。这正是我希望达到的效果,我会测试。我希望很快我们会使用WPF,但还没有。期待的事情:)我希望很快我们将使用WPF,但还没有。值得期待的事情:)