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

时间:2008-08-18 18:41:20

标签: c# .net winforms

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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亿次。

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

答案 2 :(得分:0)

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