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

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

感谢您的帮助。

有帮助吗?

解决方案

为什么不将图像放入数组中呢?

其他提示

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

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 亿次,您可以使用此代码作为控件的支持类。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top