【问题标题】:ListView spacing between items/ordering by groupsListView 项目之间的间距/按组排序
【发布时间】:2017-06-16 08:42:21
【问题描述】:

如何在我的 listView 中的某些项目之间设置一些间距?我有一个程序,列出了各自文件夹中的所有文件,但现在列表如下:

---FolderName1---
fileName1
fileName2
fileName3
---FolderName2---
fileName1
fileName2

等等……

我使用的查看模式是列表,我想在文件夹名称的位置留一些间距,但我想避免添加另一个空行,只是为了在最后一个文件之间留一点空间名称和文件夹名称,以及第一个文件。我如何做到这一点?

for (int i = 0; i < folderNum; i++)
{
    listView1.Items.Add(folderNum[i].Name);
    for (int j = 0; j < fileNum; j++)
    {
        listView1.Items.Add(fileNum[j].Name);
    }
}

【问题讨论】:

  • 我认为这是不可能的。您可以为每个项目分配不同的字体,但高度始终相同..
  • 如果我使用不同的视图模式会怎样?有没有办法制作某种组,其中组名是文件夹名称或类似名称?
  • 您可以使用View=Details 并创建群组。他们更高,但我发现没有办法设置他们的字体等..
  • 好的,我该怎么做呢?我不想要组中的任何列或图片。我用一些伪代码编辑了这个问题。外部for循环中应该有一些东西可以将文件夹名称分组,但我不知道是什么。

标签: c# winforms listview


【解决方案1】:

您可以使用View=Details 并创建Groups。它们更高,但不幸的是我没有办法设置它们的Font 等。

您可以在添加Items 或之前或之后添加Groups。您可以随时添加更多Groups或更改项目所属的项目。您也可以删除Group;在这种情况下,它的所有项目都会移动到'default' Group

这是一个例子:

准备一些数据:

string root = @"D:\scrape\patterns";
string mask = "*10*";
List<string> folders = Directory.GetDirectories(root).ToList();
List<string> files = Directory.GetFiles(root, mask, SearchOption.AllDirectories).ToList();

准备ListView

listView1.View = View.Details;
listView1.Columns.Add("Png Files");

现在添加Groups:

    // 1st group: add root search folder..:
    listView1.Groups.Add(root,root);
    // .. and all 1st level nested folders as more (possible) groups:
    foreach (string f in folders) listView1.Groups.Add(f, f);

最后插入Items:

    // insert items with groups:
    foreach (string f in files)
    {
        string key = Path.GetDirectoryName(f);
        string text = Path.GetFileName(f);
        var lvi = listView1.Items.Add(text);
        lvi.Group = listView1.Groups[key];
    }

请注意,您可以随时更改GroupItem 所属的..:

listView2.Items[2].Group = listView2.Groups[1];

几点说明:

  • 如果您仔细观察,您会发现我移动的 Item 已分配给之前为空的 Group。这些根本不显示。

  • 任何不带GroupItem 都将添加到Group "default",该Group "default" 显示在顶部。您无法更改名称,因此最好创建自己的名称并将“未分组”项目分配给它。我为此使用了搜索根的名称。

  • 我不知道除了HeaderTextHeaderAlignment 之外的其他组样式;似乎没有属性,也没有在任何DrawXXX 事件中绘制。在 DrawVisualStyleElementListViewGroup1 事件或函数中有不完整的提示,但我不知道如何使用它..

【讨论】:

  • 谢谢,这就像一个魅力。我希望有更多关于列表不同视图模式的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2017-12-04
  • 1970-01-01
  • 2013-08-01
  • 2015-11-24
  • 2012-07-12
  • 2021-05-28
相关资源
最近更新 更多