質問
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 億回以上クリックしないという想定の下で、このコードをコントロールのバッキング クラスとして使用できます。
このクラスが作成されると、指定されたイメージ リストを外部で変更することはできないことに注意してください。そのようなことをしたい場合は、使い捨てパターンを実装し、それに応じて列挙子を破棄する必要があります。
所属していません StackOverflow