0

私は48のフレーム/画像を持っています。再生(button14)をクリックすると、画像が自動的に移動します。

しかし、トラックバーバーがタイマーと一緒に移動することも望んでいます。しかし、TrackBar1.Value = _indx; を作成すると、timer3 tick イベントでは、何度も何度も再生を行っているときに、48 フレームの場合は trackBar の値が変化するため、trackBar には 15 ティックしかなく、右側の端に到達すると停止します。

私が欲しいのは、再生をクリックすると、一時停止をクリックしてから停止するまで続行して、画像を何度も実行することです。

実際には、timer3 tick イベントで _indx++; も実行するため、trackBar の値が変更されます。また、trackBar に 15 フレームあると、続行する代わりに最後に停止します。

private void btnPlay_Click(object sender, EventArgs e)
{
    _indx = 0;
    DirectoryInfo dir = new DirectoryInfo(sf);

    if (_files == null)
        _files = new List<FileInfo>();

    FileInfo[] fi = dir.GetFiles("*.bmp");
    _files.AddRange(fi);

    _files = _files.OrderBy(f => f.LastWriteTime).ToList();
    button14.ForeColor = Color.Red;
    button13.ForeColor = Color.Black;
    button12.ForeColor = Color.Black;
    timer3.Start();
    button13.Enabled = true;
    button13.Text = "Pause";
    button12.Enabled = true;
}

private void timer3_Tick(object sender, EventArgs e)
{
    try
    {
        Image iOLd = this.pictureBox1.Image;
        Image img = Image.FromFile(_files[_indx].FullName);
        trackBar1.Value = _indx;
        label23.Text = _files[_indx].Name;
        this.pictureBox1.Image = img;

        if (iOLd != null)
            iOLd.Dispose();

        _indx++;

        if (_indx >= _files.Count)
            _indx = 0;

        timer3.Interval = 10;
        timer3.Start();
    }
    catch
    {

    }
}

private void btnPause_Click(object sender, EventArgs e)
{
    button13.ForeColor = Color.Red;
    button14.ForeColor = Color.Black;
    timer3.Stop();
    if (button13.Text == "Continue")
    {
        timer3.Start();
        button13.Text = "Pause";
        return;
    }

    if (button13.Text == "Pause")
    {
        timer3.Stop();
        button13.Text = "Continue";
    }
}

private void btnStop_Click(object sender, EventArgs e)
{
    trackBar1.Value = 0;
    Image iOLd = this.pictureBox1.Image;
    Image img = Image.FromFile(_files[0].FullName);
    this.pictureBox1.Image = img;
    if (iOLd != null)
        iOLd.Dispose();
    button13.Text = "Pause";
    timer3.Stop();
    _indx = 0;
    label23.Text = _files[_indx].Name;
    button12.ForeColor = Color.Red;
    button14.ForeColor = Color.Black;
    button13.Enabled = false;
}

Button14 は再生です button13 は Pause/Continue で、Button12 は Stop です 問題は、trackBar1.Value = _indx; を作成しない場合です。trackBar はまったく移動しません。そして、_indx++; を作成しない場合。その後、何も機能しません。

_files は List で、_indx は int です

4

0 に答える 0