【问题标题】:Items are not appearing in Listview项目未出现在列表视图中
【发布时间】:2018-02-11 15:19:49
【问题描述】:

如果我遗漏了一些简单的东西,我深表歉意,我还在学习。这是我第一次尝试递归。该程序应该执行以下操作,首先我打开我的 FileBrowserDialog,然后列表视图填充所选文件夹中的文件名。但是,当我选择文件夹时,它会填充列表视图,但我看不到任何名称并且我的列表视图会冻结。我知道它填充的原因是滚动条调整。这是我的代码:

#region FileHandlers



    void FolderSearch(string sFol)
    {
        try
        {
            foreach (string d in Directory.GetDirectories(sFol))
            {
                foreach (string f in Directory.GetFiles(d))
                {

                    listView1.Items.Add(f);
                }
                FolderSearch(d);
            }
        }
        catch (System.Exception excpt)
        {
            MessageBox.Show(excpt.Message);
        }
    }

    public void ChooseFolder()
    {
        string pPath;

        if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
        {
            pPath = folderBrowserDialog1.SelectedPath;

            FolderSearch(pPath);
        }
    }

    #endregion
    void Button1Click(object sender, EventArgs e)
    {
        ChooseFolder();
    }

【问题讨论】:

  • 冻结的原因可能是所选文件夹的层次结构非常大。尝试仅加载选定文件夹的文件名,看看您是否遇到同样的问题。注释FolderSearch(d); 行,并查看它仅使用所选文件夹的文件名填充列表视图。
  • 不幸的是,我已经尝试过这个以及使用只有几个文件夹的测试文件夹。似乎没有任何效果。
  • 您的代码在加载所选文件夹的文件之前尝试加载所选文件夹的子目录及其文件。因此,如果子目录中没有任何文件,即使所选文件夹中确实有文件,也不会将任何项目添加到列表视图中。

标签: c# windows winforms listview directory


【解决方案1】:

您的代码会跳过所选文件夹,它只会从所选文件夹中的子文件夹中获取文件,因为您首先调用 GetDirectories 方法,如果您在所选文件夹中没有子文件夹或您的子文件夹没有文件,它将一无所获。

试试这个

 void FolderSearch(string sFol)
    {
        try
        {
            foreach (string f in Directory.GetFiles(sFol))
            {
                listView1.Items.Add(f);
            }

            foreach (string d in Directory.GetDirectories(sFol))
            {                  
                FolderSearch(d);
            }
        }
        catch (System.Exception excpt)
        {
            MessageBox.Show(excpt.Message);
        }
    }

如果您只想要文件名,请使用System.IO.Path 类中的GetFileName 方法。 listView1.Items.Add(Path.GetFileName(f));

【讨论】:

  • 我实际上设法在此答案之前修复它,但是我以您提到的类似方式进行了修复。谢谢你的帮助。你说的最后一点实际上将是我的下一个任务,所以谢谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多