首页 > 解决方案 > 更新图片查看器的列表框

问题描述

我做了图片查看器。问题是当手动复制和粘贴目录中的几张图片时(从目录文件夹中的文件夹)列表框应该刷新并在其中显示新项目。我想当点击刷新按钮时,新项目显示在列表框中尝试在按钮中作为刷新,但没有发生任何事情。是任何人都可以帮助。谢谢。

    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();
    }

图片查看器表单

标签: c#

解决方案


刷新更新不会重新读取文件夹并将新文件添加到列表框中。
相反,我建议采用加载文件列表的代码并创建一个私有函数。然后,您可以从选择文件夹按钮和刷新按钮调用该代码。

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();
}

推荐阅读