|
■No63650 (poigumi さん) に返信
> timerののIntervalを1000ミリ秒にしてみたのですが、これだとすぐ最後の画像が表示されてしまいました。
そもそも、ループ処理は使いません。
timer1.Start(); を一回呼べば、その後、1000 ミリ秒ごとに
> private void timer1_Tick(object sender, EventArgs e)
> {
>
> }
のイベントが定期的に呼び出されますので、そこで画像を一つだけ表示させます。
1 回目に呼ばれた Tick イベントでは、1つ目の画像を。
2 回目に呼ばれた Tick イベントでは、2つ目の画像を。
n 回目に呼ばれた Tick イベントでは、nつ目の画像を。
最後の画像まで表示した時に、1つ目の画像を表示するのか、
それとも timer1.Stop(); で止めてしまうのかはお好みで。
> よくわからないのでソースコードを書いていただけないでしょうか?
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string[] files = { };
private int fileIndex = -1;
private void button1_Click(object sender, EventArgs e)
{
string picPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
files = Directory.GetFiles(picPath, "*.jpg", SearchOption.AllDirectories);
listBox1.DataSource = files.Select(f => Path.GetFileName(f)).ToArray();
if (files.Length == 0)
{
fileIndex = -1;
MessageBox.Show("ファイルがありません。", "",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
fileIndex = 0;
timer1.Interval = 1000;
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (fileIndex >= files.Length)
{
timer1.Stop();
}
else
{
listBox1.SelectedIndex = fileIndex;
pictureBox1.LoadAsync(files[fileIndex]);
fileIndex++;
}
}
}
}
|