質問

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

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

このクラスが作成されると、指定されたイメージ リストを外部で変更することはできないことに注意してください。そのようなことをしたい場合は、使い捨てパターンを実装し、それに応じて列挙子を破棄する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top