Фоновые изображения кнопки цикла в C#

У меня есть форма на C# с кнопкой, при нажатии которой я хочу, чтобы фоновое изображение циклически перебирало набор изображений (которые у меня есть в качестве ресурсов для проекта). Изображения называются «_1», «_2» и т. Д., И каждый раз, когда я нажимаю кнопку, я хочу, чтобы его фоновое изображение увеличивалось до следующего и возвращалось к «_1», когда оно достигает максимального значения. Есть ли способ сделать это?

Я попытался получить, button1.BackgroundImage.ToString() но это дает результат System.Drawing.Bitmap вместо того, Resources._1 как я думал (в этом случае я мог бы просто получить последний символ и включить его, чтобы изменить фон на соответствующее новое изображение).

Спасибо за вашу помощь.

Ответов (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(); }
}

Вы можете использовать этот код в качестве вспомогательного класса для вашего контроля при условии, что пользователь не нажмет кнопку более двух миллиардов раз.

Просто обратите внимание, что после создания этого класса вы не можете изменять данный список изображений снаружи. Если вы хотите делать такие вещи, вам необходимо реализовать одноразовый шаблон и соответствующим образом удалить перечислитель.

Вы можете создать подкласс Button и переопределить свойство BackgroundImage, чтобы лучше отслеживать текущий ресурс, представляющий изображение. Вы также можете переопределить метод onclick для внутренней обработки циклического перехода к следующему изображению, хотя это может быть немного странно, если ресурсы обрабатываются вне вашего производного класса кнопки.