c# - 更新图片查看器的列表框
问题描述
我做了图片查看器。问题是当手动复制和粘贴目录中的几张图片时(从目录文件夹中的文件夹)列表框应该刷新并在其中显示新项目。我想当点击刷新按钮时,新项目显示在列表框中尝试在按钮中作为刷新,但没有发生任何事情。是任何人都可以帮助。谢谢。
public Form1()
{
InitializeComponent();
}
string currentDir = "";
private void button1_Click(object sender, EventArgs e)
{
try
{
var fb = new FolderBrowserDialog();
if (fb.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
currentDir = fb.SelectedPath;
textBoxDirectory.Text = currentDir;
var dirinfo = new DirectoryInfo(currentDir);
var files = dirinfo.GetFiles().Where(c => c.Extension.Equals(".jpg") || c.Extension.Equals(".jpeg") || c.Extension.Equals(".bmp") || c.Extension.Equals(".png"));
foreach (var image in files)
{
listBoxImage.Items.Add(image.Name);
}
}
}
catch (Exception ex)
{
MessageBox.Show("There was an Error: " + ex.Message + "" + ex.Source);
}
}
private void listBoxImage_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
var selectedImage = listBoxImage.SelectedItems[0].ToString();
if (!string.IsNullOrEmpty(selectedImage) && !string.IsNullOrEmpty(currentDir))
{
var fullPath = Path.Combine(currentDir, selectedImage);
pictureBoxImagePreview.Image = Image.FromFile(fullPath);
}
}
catch (Exception)
{
throw;
}
}
private void btnRefresh_Click(object sender, EventArgs e)
{
listBoxImage.Refresh();
listBoxImage.Update();
}
解决方案
刷新和更新不会重新读取文件夹并将新文件添加到列表框中。
相反,我建议采用加载文件列表的代码并创建一个私有函数。然后,您可以从选择文件夹按钮和刷新按钮调用该代码。
private void LoadFiles()
{
try
{
var dirinfo = new DirectoryInfo(currentDir);
var files = dirinfo.GetFiles().Where(c => c.Extension.Equals(".jpg") || c.Extension.Equals(".jpeg") || c.Extension.Equals(".bmp") || c.Extension.Equals(".png"));
// This is required to not add the same file two times
listBoxImage.Items.Clear();
foreach (var image in files)
{
listBoxImage.Items.Add(image.Name);
}
}
catch (Exception ex)
{
MessageBox.Show("There was an Error: " + ex.Message + "" + ex.Source);
}
}
private void button1_Click(object sender, EventArgs e)
{
var fb = new FolderBrowserDialog();
if (fb.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
currentDir = fb.SelectedPath;
textBoxDirectory.Text = currentDir;
LoadFiles();
}
}
private void btnRefresh_Click(object sender, EventArgs e)
{
LoadFiles();
}
推荐阅读
- wordpress - 如何根据位置在 Woocommerce 上接受订单?
- postgresql - 在 TransactionScope 中加入 Rebus 并结合 Entity Framework Core 3.0,无需两阶段提交
- python - 蟒蛇回溯背包
- git - git clone 在没有任何明显原因的情况下失败
- json - 如何将 JSON 对象数组解析为 Spark Dataframe?
- python - 在具有不同颜色的同一图形上使用绘图和散点图,但即使我先绘图,散点图仍然显示在绘图下方
- kubernetes - 从同一集群中的另一个 pod 连接到 redis pod
- python-3.x - 如何强制 distutils.dir_util.copy_tree 函数继续出错?
- angular - Angular FormArray 名称不显示拖放
- java - 在 RxJava 中,是通过可观察的多线程发出事件吗?