В верхней части Form1 я сделал:Как я могу сделать таймер, который изменит отображение изображений в pictureBox1 вперед или назад?
private bool farwardbackward;
private FileInfo[] fi;
Тогда у меня есть 4 кнопки мыши события:
Вперед:
private void button4_Click(object sender, EventArgs e)
{
farwardbackward = true;
button5.Enabled = true;
button6.Enabled = true;
timer5.Start();
}
и назад:
private void button3_Click(object sender, EventArgs e)
{
farwardbackward = false;
button5.Enabled = true;
button6.Enabled = true;
if (current == -1)
current = fi.Length;
timer5.Start();
}
И остановить анимацию :
private void button6_Click(object sender, EventArgs e)
{
timer5.Stop();
button6.Enabled = false;
button5.Text = "Pause Animation";
button5.Enabled = false;
Bitmap lastdownloadedimage = new Bitmap(fi[fi.Length -1].FullName);
pictureBox1.Image = lastdownloadedimage;
}
И последняя кнопка пауза/продолжить:
private void button5_Click(object sender, EventArgs e)
{
b = (Button)sender;
if (b.Text == "Pause Animation")
{
timer5.Enabled = false;
b.Text = "Continue Animation";
}
else
{
timer5.Enabled = true;
b.Text = "Pause Animation";
}
}
, а затем в timer5
случае клеща, что это интервал набора для 1000 мс я сделал:
int current = -1;
private void timer5_Tick(object sender, EventArgs e)
{
if (farwardbackward)
current = Math.Min(current + 1, fi.Length - 1);
else
current = Math.Max(current - 1, 0);
if (fi.Length > 0)
{
Bitmap newbmp = new Bitmap(fi[current].FullName);
pictureBox1.Image = newbmp;
pictureBox1.Refresh();
newbmp.Dispose();
}
}
Когда я бегу моя программа I всегда видеть в pictureBox1 последнее/последнее изображение из переменной fi. Например, первое изображение в ФИ 000004.gif и последнее изображение 050122.gif Я вижу 050122.gif
Теперь то, что должно быть логики при создании изображений для отображения в pictureBox1 как анимированный GIF стиль ?
Если первый раз я нажимаю на кнопку, чтобы двигаться вперед так, что произойдет сейчас он прыгает на 000004.gif изображения, а затем показать 000005.gif и так далее ...
Если первый раз я нажимаю на обратном затем он начнет возвращаться с 050122.gif до 050121.gif и так далее ...
Проблема заключается в том, что я нажимаю на обратную сторону и после некоторых изображений нажимаю кнопку вперед, затем она продолжается с изображения, которое было и двигайтесь вперед, но затем, когда он доходит до 050122.gif, он останавливается. и он должен продолжаться без остановок. Идея состоит в том, чтобы держать его неподвижным. Я не хочу, чтобы он остановился, если добрался до 050122.gif. Если он попадает на первое изображение или последнее изображение, просто продолжайте цикл без остановки. Но по какой-то причине на 050122.gif остановитесь, если я нажимаю на кнопку «дальше», пока она движется назад.
Проблема, если я не ошибаюсь сейчас, когда я нажимаю посередине, чтобы изменить направление анимации. Затем, когда он доходит до последнего изображения или первого изображения, он останавливается. И я хочу, чтобы он продолжался без остановки, только если я нажму кнопку остановки.
Другая вещь, которую я должен делать в случае нажатия кнопки остановки? Shouldi сбросить некоторые значения или переменные?
Это timer5 код клещ событие:
int current = -1;
private void timer5_Tick(object sender, EventArgs e)
{
if (fi.Length > 0)
{
if (farwardbackward)
{
current = (current >= fi.Length - 1) ? 0 : current++;
}
else
{
current = (current <= 0) ? fi.Length - 1 : current--;
}
pictureBox1.Image = new Bitmap(fi[current].FullName);
pictureBox1.Refresh();
}
}
При нажатии двигаться вперед или назад я получаю же исключение: Индекс находился вне границ массива
System.IndexOutOfRangeException was caught
HResult=-2146233080
Message=Index was outside the bounds of the array.
Source=My Weather Station
StackTrace:
at mws.Form1.timer5_Tick(Object sender, EventArgs e) in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\Form1.cs:line 1317
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at mws.Program.Main() in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\Program.cs:line 28
InnerException:
Line 1317 is:
pictureBox1.Image = new Bitmap(fi[current].FullName);
Я не могу понять, как ваш код работает в первую очередь. Например, в вашем событии таймера вы загружаете растровое изображение * newbmp * присваиваете его * pictureBox1 *, а затем вы * распоряжаетесь * его! С помощью этого кода изображение не отображается. –