矢印キーを1つずつクリックしてからクリックしてからもう一度クリックすると、画像が変化します。しかし、右矢印キーをノンストップで押し続けると、右矢印キーを停止したままにして、このtrackBar値の画像がロードされた場合にのみ、画像が変化します。
これは私のスクロールイベントです:
private void trackBar1_Scroll(object sender, EventArgs e)
{
currentFrameIndex = trackBar1.Value;
textBox1.Text = "Frame Number : " + trackBar1.Value;
wireObject1.woc.Set(wireObjectAnimation1.GetFrame(currentFrameIndex));
LoadPictureAt(trackBar1.Value, sender);
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button8.Enabled = false;
SaveFormPicutreBoxToBitMapIncludingDrawings();
return;
}
これまでのところ、trackBarの他のイベントはありません。
これはLoadPictureAt関数です。
private bool LoadPictureAt(int nIndex, object c)
{
bool bRet = false;
if (nIndex >= 0 && nIndex < fi.Length)
{
if (c.Equals(trackBar1))
pictureBox1.Load(fi[nIndex].FullName);
bRet = true;
}
return bRet;
}
私はそれを解決しました:
スクロールイベントの前に新しい関数を追加しました。
private void setpicture(int indx)
{
if (fi == null)
{
}
else
{
if (indx >= 0 && indx <= trackBar1.Maximum && fi.Length > indx)
{
try
{
label19.ForeColor = Color.Red;
fileToolStripMenuItem.Enabled = true;
label19.Visible = false;
label20.Visible = false;
label14.Visible = true;
label15.Visible = true;
label8.Visible = true;
label9.Visible = true;
trackBar1.Enabled = true;
using (FileStream fs = new FileStream(fi[indx].FullName, FileMode.Open))
{
this.label8.Visible = true;
this.label9.Visible = true;
this.label9.Text = fi[indx].Name;
Image img = null;
Bitmap bmp = null;
Image imgOLd = null;
try
{
img = Image.FromStream(fs);
bmp = new Bitmap(img);
imgOLd = this.pictureBox1.Image;
this.pictureBox1.Image = bmp;
if (imgOLd != null)
imgOLd.Dispose();
img.Dispose();
img = null;
}
catch
{
if (img != null)
img.Dispose();
if (bmp != null)
bmp.Dispose();
if (imgOLd != null)
imgOLd.Dispose();
}
}
}
catch
{
}
}
else
{
Image imgOLd = this.pictureBox1.Image;
if (imgOLd != null)
{
imgOLd.Dispose();
imgOLd = null;
}
Application.DoEvents();
}
}
}
そして、スクロールイベントを次のように変更しました。
private void trackBar1_Scroll(object sender, EventArgs e)
{
currentFrameIndex = trackBar1.Value;
textBox1.Text = "Frame Number : " + trackBar1.Value;
wireObject1.woc.Set(wireObjectAnimation1.GetFrame(currentFrameIndex));
trackBar1.Minimum = 0;
trackBar1.Maximum = fi.Length - 1;
setpicture(trackBar1.Value);
pictureBox1.Refresh();
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button8.Enabled = false;
SaveFormPicutreBoxToBitMapIncludingDrawings();
return;
}