C# 中的循环按钮背景图像

Posted

技术标签:

【中文标题】C# 中的循环按钮背景图像【英文标题】:Cycle Button Background Images in C# 【发布时间】:2010-09-06 02:47:24 【问题描述】:

我有一个 C# 表单,它有一个按钮,单击该按钮时,我希望背景图像循环显示一组图像(我将其作为项目的资源)。这些图像被命名为“_1”、“_2”等,每次单击按钮时,我都希望其背景图像递增到下一个,并在达到最高值时返回“_1”。有没有办法做到这一点?

我尝试获取button1.BackgroundImage.ToString(),但生成System.Drawing.Bitmap 而不是Resources._1,就像我想的那样(在这种情况下,我可以获取最后一个字符并打开它以将背景更改为适当的新图像)。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

你为什么不把图像放在一个数组中?

【讨论】:

【参考方案2】:

您可以继承 Button 并覆盖 BackgroundImage 属性,以便更好地跟踪表示图像的当前资源。您也可以重写 onclick 方法以在内部处理循环到下一个图像,但如果资源是在派生按钮类之外处理的,这可能有点奇怪。

【讨论】:

【参考方案3】:
class YourClass

    private IEnumerator<Image> enumerator;

    YourClass(IEnumerable<Image> images)
    
        enumerator = (from i in Enumerable.Range(0, int.Max)
                      from image in images
                      select image).GetEnumerator();
        enumerator.MoveNext();
    

    public Image CurrentImage  get  return enumerator.Current;  

    public void OnButtonClick()  enumerator.MoveNext(); 

假设用户点击按钮的次数不会超过 20 亿次,您可以将此代码用作控件的支持类。

请注意,一旦创建了此类,您就无法在外部修改给定的图像列表。如果你想做这样的事情,你需要实现一次性模式并相应地处理枚举器。

【讨论】:

以上是关于C# 中的循环按钮背景图像的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm - 在标签上切换背景图像

Winforms c#从弹出表单更改父表单的背景图像

HTML 语言中页面背景图像、背景音乐的设置方法?插入超链接、图像的语法是啥

同时播放两个声音c#

在winform c#中去除捕捉图像背景中的黑暗

swift 3中的按钮背景图像