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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
2 849
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Почему бы вам просто не поместить изображения в массив?

Вы можете создать подкласс 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(); }
}

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

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

Другие вопросы по теме