使“下一步”按钮在图片管理器中工作
本文关键字:下一步 管理器 工作 按钮 | 更新日期: 2023-09-27 18:35:25
我目前正在用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,我选择第一张图片,下一个(按钮2)只是转到第2张,再次按下并显示第3张,再次显示第4张,...等。
我真的在这个上面烧了我的大脑,我只是想不通。
PS:button2上的行只是我尝试过的一些东西。
我知道这不是很多工作(我已经完成),但对于初学者来说,我希望这已经足够了。
非常感谢您的时间,因为我之前回答过问题!
代替OpenFileDialog
,请使用FolderBrowserDialog
。 这将允许用户选择包含文件的文件夹,而不仅仅是单个文件。 (所以用户有一些期望,操作会涉及整个文件夹,这很好。
在该对话框中,可以使用 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
是文件名列表。 请记住,它将是文件夹中的所有文件,因此您可能需要对其进行一些过滤。 搜索模式可以帮助解决这个问题,或者您甚至可以在获取列表后手动过滤列表以应用更复杂的逻辑。
您可以枚举该列表。 例如,也许您还存储当前索引:
IList<string> files;
int currentFileIndex = 0;
然后随时显示"当前"文件:
pictureBox1.ImageLocation = files[currentFileIndex];
并随时移动到下一个索引(如果它到达末尾,请记住将其重置为第一个索引):
currentFileIndex++;
if (currentFileIndex >= files.Count)
currentFileIndex = 0;