c# – 为什么我的ListView没有正确显示详细信息视图?

所以,我有一个列表视图,如问题标题所示.我已经设置了两个列:Name和Date Modified.这些是在设计器中添加的,这是设计者发出的代码供参考:

// lstFiles
this.lstFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmName,
this.clmDate});
// ...

// clmName
this.clmName.Text = "Name";
this.clmName.Width = 105;

// clmDate
this.clmDate.Text = "Modified";
this.clmDate.Width = 128;

在设计师看来,这看起来很漂亮.

列表项本身是ListViewItem的一个小子类,只是从文件中提取一些元数据(在这种情况下,修改日期),并向自身添加一个子项:

class GalleryItem : ListViewItem {
    public string File;
    public DateTime DateModified;

    public GalleryItem(string file) : base(Path.GetFileNameWithoutExtension(file)) {
        this.ImageKey = Path.GetExtension(file);
        File = file;
        DateModified = System.IO.File.GetLastWriteTime(file);

        this.SubItems.Add(DateModified.ToString());
    }
}

要将项添加到列表中,我只需执行以下操作:

lstFiles.BeginUpdate();
lstFiles.Clear();

foreach (String f in files) {
    ListViewItem lvi = new GalleryItem(f);
    lvi.Group = lstFiles.Groups["grpFiles"]; //this varries

    //omitted: check/add icon to list 

    lstFiles.Items.Add(lvi);
}

lstFiles.EndUpdate();

所以,这一切都适用于大图标视图等:

但是,它在详细信息视图中分解:

列表中有项目(有一个滚动条).如果您在红色箭头(在油漆中添加)下的列中大致单击,您将选择一个项目(右上方区域是图像预览),但您不会看到任何选定的内容.

总之,我做错了什么?

我只是掀起了一个样本来测试这个:

using System;
using System.Windows.Forms;

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var G1 = new ListViewGroup("Group 1");
        var G2 = new ListViewGroup("Group 2");

        Application.Run(new Form {
            Controls = {
                new ListView  {
                    Dock = DockStyle.Fill,
                    Groups = { G1, G2 },
                    View = View.Details,
                    //Columns = { "First", "Second" },
                    Items = {
                        new ListViewItem { Text = "One", Group = G1, SubItems = { "1" } },
                        new ListViewItem { Text = "Two", Group = G2, SubItems = { "2" } },
                        new ListViewItem { Text = "Three", Group = G2, SubItems = { "3" } },
                    },
                },
            },
        });
    }
}

您会注意到它重复了问题.如果取消注释创建列的行,它将起作用.这表明您的列不存在.

在输入时,答案突然出现在我脑海中:

您正在调用ListView.Clear而不是ListView.Items.Clear,因此您要删除代码中的列.

相关文章
相关标签/搜索