2008-08-18 7 views
3

私はC#のフォームを持っています。このボタンには、クリックすると背景画像に一連の画像(プロジェクトのリソースとして持っているもの)が循環しています。画像には '_1'、 '_2'などの名前が付けられています。ボタンをクリックするたびに背景画像が次の画像に増加し、最高になると「_1」に戻ります。これを行う方法はありますか? サイクルボタンの背景画像C#

私は button1.BackgroundImage.ToString()を取得しようとしたが、それは System.Drawing.Bitmap代わりの Resources._1私は(この場合、私はちょうど最後の文字を得ることができ、適切な新しいイメージの背景を変更することに切り替える)となることを考えていたように得られます。

ありがとうございました。

答えて

3

なぜ画像を配列に入れないのですか?

0

Buttonをサブクラス化してBackgroundImageプロパティをオーバーライドすると、イメージを表す現在のリソースをよりよく把握できます。また、onclickメソッドをオーバーライドして、次のイメージへのサイクリングを内部的に処理することもできますが、リソースが派生ボタンクラスの外部で処理されている場合は少し変なことがあります。

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

このコードは、ユーザーがボタンを20億回以上クリックしないことを前提として、コントロールのバッキングクラスとして使用できます。

このクラスが作成されると、外部の画像リストを変更することはできません。そのようなことをしたい場合は、使い捨てパターンを実装し、それに応じて列挙子を処分する必要があります。