У меня есть форма на 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(); }
}
Вы можете использовать этот код в качестве вспомогательного класса для вашего контроля при условии, что пользователь не нажмет кнопку более двух миллиардов раз.
Просто обратите внимание, что после создания этого класса вы не можете изменять данный список изображений снаружи. Если вы хотите делать такие вещи, вам необходимо реализовать одноразовый шаблон и соответствующим образом удалить перечислитель.