几天前,我开始使用自己的照片浏览器/编辑器。我已经实现了方法“OnKeyDown”,它根据按下的箭头键改变照片:
case Keys.Left:
case Keys.Down:
ic.getImage().Dispose();
--fileIndex;
if (fileIndex < 0)
fileIndex = (fileCount - 1);
ic.setImage(Image.FromFile(fileNames[fileIndex]), ref pictureBox1);
break;
case Keys.Right:
case Keys.Up:
ic.getImage().Dispose();
++fileIndex;
fileIndex %= fileCount;
ic.setImage(Image.FromFile(fileNames[fileIndex]), ref pictureBox1);
break;
这完美无缺。我想做的下一件事是编写幻灯片,所以我使用System.Timers.Timer来触发事件goRight(),它执行相同的代码,如同按下右箭头键一样:
public void goRight(object source, ElapsedEventArgs e)
{
ic.getImage().Dispose();
++fileIndex;
fileIndex %= fileCount;
ic.setImage(Image.FromFile(fileNames[fileIndex]), ref pictureBox1);
}
使用幻灯片应用时,只需中断。我无法弄清楚为什么,因为代码是完全一样的。如果我注释掉ic.getImage()。Dispose()幻灯片可以正常工作,但随着每张下一张照片,RAM中的数据量会越来越高。
我做错了吗?谢谢你的时间,我很感激!
呃,我差点忘了。是否有一种方法可以使索引在没有if语句的情况下向后移动(在向下键和向左键事件中)(如向前运算符%)。我试过这个:++fileIndex;
fileIndex %= fileCount;
ic.setImage(Image.FromFile(fileNames[(fileCount -1) - fileIndex]), ref pictureBox1);
如果我只向一个方向前进,它会很有效,但如果我改变方向,它会跳过几个索引。有什么想法吗?
祝你好运。 ž
答案 0 :(得分:1)
对于索引,您可以执行以下操作:
fileIndex = (fileIndex == 0) ? fileCount -1 : fileIndex - 1; // decrementing
fileIndex = (fileIndex == fileCount - 1) ? 0 : fileIndex + 1; // incrementing
正如cHao所说,请改用System.Windows.Forms.Timer。