0

几天前,我开始使用自己的照片查看器/编辑器。我已经实现了方法“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);

如果我只朝一个方向走,效果很好,但如果我改变方向,它会跳过几个索引。对此有什么想法吗?

最好的祝福。Z

4

1 回答 1

1

对于索引,您可以执行以下操作:

fileIndex = (fileIndex == 0) ? fileCount -1 : fileIndex - 1; // decrementing

fileIndex = (fileIndex == fileCount - 1) ? 0 : fileIndex + 1; // incrementing

正如 cHao 所说,改用 System.Windows.Forms.Timer 。

于 2012-10-30T21:29:11.740 回答