これは私の最初の投稿です。まず、いくつかの背景について説明します。私は C# を初めて使用し、文字通り歯が生える段階にあります。私は化学エンジニアで、主に MATLAB や Mathematica などの言語の経験がありますが、ずっとプログラミングが好きで、C# を学習して、使用しているいくつかのプログラム用のユーザー フレンドリーなインターフェイスを作成することにしました。WPFではなくWindowsフォームを使用していることに注意してください。
私がやりたいことは、さまざまなフォームにリンクするメイン メニュー画面を持つことです。見栄えを良くするために、私がやりたいのはこれです。メイン ウィンドウのピクチャ ボックス (画像はボタンのものです) にカーソルを合わせると、ボタンが少し「大きく」なり、離れると元のサイズに「縮小」するはずです。これまでのところ、私の方法は、mouseEnter イベントでこの成長アニメーションの gif を読み込んでから、mouseLeave で縮小アニメーションを読み込もうとしていましたが、これはそれぞれの gif を何度もループするだけです。GIFを1回だけ再生するにはどうすればよいですか?
フレーム間にスレッドスリープを入れてフレームを順番にロードしようとしましたが、これを行うときに表示されるのは、ロードしようとした最後の画像だけです。これは、このメソッドに使用されるコードの例です。1 つの画像を表示し、0.1 秒後に別の画像を表示しようとしています
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
((PictureBox)sender).Image =Image.FromFile("C:/Users/michael/Desktop/131.bmp");
Thread.Sleep(100);
((PictureBox)sender).Image = Image.FromFile("C:/Users/michael/Desktop/131a.bmp");
}
また、for ループを使用してボタンやピクチャ ボックスのサイズを大きくするなど、gif なしでこれを行う方法はありますか?
編集1:2番目のアニメーションを開始すると最初のアニメーションが停止するように、タイマーストップをどこに配置しますか?
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
Timer timeraf = new Timer();
timeraf.Interval = 10;
timeraf.Tick += new EventHandler(timerAfwd_Tick);
timeraf.Start();
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
Timer timerab = new Timer();
timerab.Interval = 10;
timerab.Tick += new EventHandler(timerAbwd_Tick);
timerab.Start();
}