我有 1 个图片盒,名为studPic
。我想要得到的是,当我单击“随机播放”按钮时,从资源中获取随机图像。
private void button2_Click(object sender, EventArgs e)
{
...
}
经过研究我发现以下
http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/38d36fa4-1f5f-43e9-80f6-3c9a4edc7705/ http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/38d36fa4-1f5f-43e9-80f6-3c9a4edc7705/
我是 C# 的新手..有没有更简单的方法来实现这个结果?比如不加图片名称?
UPDATE
List<string> pictureNames = new List<string>();
pictureNames.Add("1");
pictureNames.Add("2");
pictureNames.Add("3");
int randomPictureIndex = new Random().Next(0, pictureNames.Count);
string randomPictureName = pictureNames[randomPictureIndex];
pictureNames.Remove(randomPictureName);
Image img = Properties.Resources.randomPictureName; //erroor
studPic.Image = img;
收到错误消息
错误 1“Properties.Resources”不包含“randomPictureName”的定义
我不会为此使用系统资源。它们不像离线软件的文件系统那样可维护。
将您的图像放在应用程序的文件夹中。这样它们就可以轻松更新/更改。
说 :
C:\Ninjas - app
c:\Ninjas\images - images
创建一个数组来保存这些图像。
string[] files = System.IO.Directory.GetFiles("c:\ninjas\images");
您需要在 GetFiles 上放置一些过滤器,以确保您只获取图片。
现在在该数组中抓取一个随机位置(您已经表明您知道如何进行随机数)。
我们有了数组,让我们对它进行洗牌,然后你可以按顺序浏览它们(比随机挑选要快得多。CPU 会喜欢你的)
private string[] files;
private int currentIndex = 0;
private void initializeImages()
{
//Grab directories in your images directory
string appRoot = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
files = System.IO.Directory.GetFiles(appRoot + @"\images");
Random rnd = new Random();
files = files.OrderBy(x => rnd.Next()).ToArray();
}
private void setImage()
{
pictureBox1.ImageLocation = files[currentIndex];
}
private void previousImage()
{
currentIndex = currentIndex > 0 ? currentIndex - 1 : 0;
setImage();
}
private void nextImage()
{
currentIndex = currentIndex < files.Length - 1 ? currentIndex + 1 : files.Length - 1;
setImage();
}
有几件事:
- 不要对文件路径进行硬编码。将其放入您的 app.config 文件中并引用它。
- 您可以将文件数组置于全局,这样就不需要每次都运行它。
如果您想将其作为幻灯片放映,一直运行到用户取消为止,我建议您执行以下操作:
- 使用计时器对象来调用方法来增加图像计数,从而改变图片。
- 不要在 GUI 上使用 thread.sleep,因为它会暂停 GUI - 这不是一件好事。
如果要添加“下一个”/“上一个”按钮,则需要有一个可以增加/减少的全局索引(例如 currentIndex),然后调用代码来设置图像
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)