如何在listView中的某些项目之间建立一些间距?我有一个程序,它列出了各自文件夹中的所有文件,但现在列表如下:
---FolderName1---
fileName1
fileName2
fileName3
---FolderName2---
fileName1
fileName2
等等......
我使用的视图模式是List,我希望文件夹名称有一些间距,但我想避免添加另一个空行,只是为了在最后一个文件之间留出一点空格名称和文件夹名称以及第一个文件。我如何实现这一目标?
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);
}
}
答案 0 :(得分:1)
您可以使用View=Details
并创建Groups
。他们更高但不幸的是我没有办法设置他们的Font
等等。
您可以在添加Groups
时或之前或之后添加Items
。您可以随时添加更多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];
}
请注意,您可以随时更改所属的Group
Item
..:
listView2.Items[2].Group = listView2.Groups[1];
一些注意事项:
如果您仔细观察,可以看到我移动的Item
被分配给之前为空的Group
。那些根本没有显示。
任何Item
没有Group
的{{1}}都会添加到Group "default"
,显示在顶部。您无法更改名称,因此最好创建一个名称,并为其指定“未编组”项目。我使用了搜索根的名称。
我知道无法为HeaderText
和HeaderAlignment
之外的群组设置样式;似乎没有任何属性,也没有在任何DrawXXX
事件中绘制。在DrawVisualStyleElementListViewGroup1事件或函数中有一些不完整的提示,但我无法找到如何使用它。