想知道是否有人可以帮助解决 Windows Forms/.net ListView 问题(在本例中使用 C#...)
我们将 ListViewItems 添加到 ListView。 其中一些按照设计,不属于任何群体。 在运行时,它们出现在一个名为“默认”的组中,该组不是在我们的代码中创建的 - .Net 就是这样做的。
(请注意,当列表视图中只有非组项目时,此“默认”标题不会出现。但是,一旦您添加包含项目的组,它就会出现)。
无论如何,(令人惊讶的)问题是似乎无法本地化或重命名该组。 如果有人可以的话我会很高兴 (a) 告知我其他情况,即如何重命名,或 (b) 如何完全不显示“默认”标头 ?
(注意:我确实意识到我们可以重写以确保所有项目都在组中,从而使我们能够完全控制所有组名称。但是,控件中内置了很多逻辑,如果可能的话,我宁愿避免任何重构。另外,我很想知道这是否是微软方面有趣的监督,或者它是否可以改变,但我太笨了,不知道如何改变)。 谢谢 卡拉吉
这是文档所说的
任何未分配到组的项目都将显示在默认组中,该组的标题标签为“DefaultGroup{0}”。 默认组不包含在 Groups 集合中,并且无法更改。它主要用于调试,以确保所有项目都已正确添加到组中。
所以,我认为这是不可能的。
您无法更改默认标题。
但是您可以添加一个新组(属性组),并将所有项目分配到该组(属性项目/组)。
将 ShowGroups 属性设置为“false”,这样就可以解决问题。
//代码行 lstView.ShowGroups = false;
对于列表视图,此属性默认设置为 true,除非指定,否则任何 ListViewItem 都会进入此默认组。通过将其设置为 false,您将删除列表视图中的组。
您可以使用反射来重命名默认组的标题文本。ListView 有一个名为 defaultGroup 的私有 ListViewGroup 字段,您可以使用反射来操作该字段并执行任何您想要的操作,例如重命名标题文本。
这是我用过的:
private void RenameDefaultGroup(ListView lv, string newText)
{
Type lvType = lv.GetType();
var v2 = lvType.GetProperty("DefaultGroup", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
ListViewGroup lvg = v2.GetValue(lv) as ListViewGroup;
lvg.Header = newText;
}
这样称呼
RenameDefaultGroup(listView1, "Not Grouped");
我相信这出现在一个空(默认)组中。转到组并删除第一个条目。