我目前正在C#中开展一个关于某些图片排列的小项目。这个项目将包含几个我将尝试解决的功能。事情就是我被卡住了......一开始就让我感到尴尬。 到目前为止,我完成了以下几行代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_MouseClick(object sender, MouseEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
pictureBox1.ImageLocation = openFileDialog.FileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.ImageLocation = pictureBox1.InitialImage;
}
}
所以,第一个按钮会让我能够加载图片。这样可行。问题是我不知道如何使"下一个图片按钮"(Button2)工作。我一直在搜索所有网站,包括昨天这个网站3个小时,但找不到解决方案,至少不是"按钮点击"一。我有一个充满图片的文件夹,500多个,我想按类别组织它们,我稍后会添加一个功能。我想要什么"下一个"按钮要做的是以下。我按下按钮1,我选择了第一张图片,然后按下NEXT(按钮2),再次按下并显示第3张,再次显示第4张,等等。
我真的在这个上绞尽脑汁,我无法弄明白。
P.S:button2上的一行只是我试过的一些东西。
我知道这不是很多工作(我已经做过)但是对于初学者我希望它足够了。
非常感谢您的时间,因为我之前已经回答了问题!
答案 0 :(得分:0)
使用a FolderBrowserDialog
而不是OpenFileDialog
。这将允许用户选择包含文件的文件夹,而不仅仅是单个文件。 (因此用户有一些期望操作将涉及整个文件夹,这很好。)
在该对话框中,您可以使用SelectedPath
属性获取目录列表。类似的东西:
var files = Directory.EnumerateFiles(folderBrowserDialog.SelectedPath);
事实上,不妨让files
成为班级成员:
public partial class Form1 : Form
{
IList<string> files;
public Form1()
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
this.files = new List<string>();
}
private void button1_MouseClick(object sender, MouseEventArgs e)
{
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
files = Directory.EnumerateFiles(folderBrowserDialog.SelectedPath).ToList();
}
}
现在files
是文件名列表。请记住,它将是文件夹中的所有文件,因此您可能希望对其进行一些过滤。 search pattern可以提供帮助,或者您甚至可以在获取列表后手动过滤列表以应用更复杂的逻辑。
您可以按照自己喜欢的方式枚举该列表。例如,也许您也存储当前索引:
IList<string> files;
int currentFileIndex = 0;
然后随时显示“当前”文件:
pictureBox1.ImageLocation = files[currentFileIndex];
随时移动到下一个(如果到达末尾,请记住将其重置为第一个索引):
currentFileIndex++;
if (currentFileIndex >= files.Count)
currentFileIndex = 0;