2008-08-18 6 views
3

J'ai un formulaire en C# qui a un bouton qui, quand on clique dessus, je veux que l'image de fond fasse défiler un ensemble d'images (que j'ai en tant que ressources au projet). Les images sont nommées '_1', '_2', etc. et chaque fois que je clique sur le bouton, je veux que son image d'arrière-plan soit incrémentée à la suivante et retourne à "_1" quand elle atteint le maximum. Y a-t-il un moyen de faire cela?Images de fond de bouton de cycle en C#

J'ai essayé d'obtenir button1.BackgroundImage.ToString() mais que les rendements System.Drawing.Bitmap au lieu de Resources._1 comme je pensais que ce serait (dans ce cas, je pouvais obtenir le dernier caractère et passer sur cela pour changer l'arrière-plan à la nouvelle image appropriée).

Merci pour votre aide. Pourquoi ne pas simplement mettre les images dans un tableau?

Répondre

0

Vous pouvez sous-classer Button et remplacer la propriété BackgroundImage afin que vous puissiez mieux suivre la ressource actuelle qui représente l'image. Vous pouvez également remplacer la méthode onclick pour gérer en interne le cycle vers l'image suivante, bien que cela puisse être un peu étrange si les ressources sont gérées en dehors de votre classe de boutons dérivés.

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(); } 
} 

Vous pouvez utiliser ce code comme classe de sauvegarde pour votre contrôle en supposant que l'utilisateur ne cliquera pas sur le bouton plus de deux milliards de fois. Notez simplement qu'une fois cette classe créée, vous ne pouvez pas modifier une liste d'images donnée à l'extérieur. Si vous voulez faire de telles choses, vous devez mettre en œuvre un modèle jetable et disposer l'énumérateur en conséquence.