【问题标题】:Cant add item to ListView C#无法将项目添加到 ListView C#
【发布时间】:2017-11-24 13:01:01
【问题描述】:

您好,我在 C# 中有这段代码来获取文件并将它们列在 ListView 中,但没有任何反应

string[] files = Directory.GetFiles("plugins/");
foreach (string file in files)
{
    string fileName = Path.GetFileNameWithoutExtension(file);
    ListViewItem item = new ListViewItem(fileName);
    item.Tag = file;
    listView1.Items.Clear();
    listView1.Items.Add(item);

}

我什至尝试用一行代码插入一个不同的

listView1.Items.Clear();
listView1.Items.Add("item");

但它没有添加该项目 谢谢你

【问题讨论】:

  • 移动 listView1.Items.Clear();并将其放在 foreach 之前...
  • 它不起作用:(
  • 在 foreach 循环之前清除列表视图。在添加每个文件之前,您正在清除列表。
  • 请清楚描述您的问题(“不起作用”不是)并提供minimal reproducible example
  • 我编辑了最后一部分

标签: c# winforms listview


【解决方案1】:

ListViewItem.Tag 是您要设置的唯一属性,并且该属性不会在 UI 中可见。试试这个:

string[] files = Directory.GetFiles("plugins/");
            foreach (string file in files)
            {

                string fileName = Path.GetFileNameWithoutExtension(file);
                ListViewItem item = new ListViewItem(fileName);
                item.Text= file;
                listView1.Items.Add(item);

            }

【讨论】:

  • 严重性代码描述项目文件行抑制状态错误 CS1061“ListViewItem”不包含“Content”的定义,并且找不到接受“ListViewItem”类型的第一个参数的扩展方法“Content”(您是否缺少 using 指令或程序集引用?)
  • 文档说可以,也许您使用的是不同的版本。是否有一个名为 Text 的属性?
  • 你怎么知道的?是您在 UI 中看不到它们,还是您在调试器中单步执行并且它没有向 listview1.Items 添加任何内容?如果您执行 item.Text = "DOES THIS WORK" 怎么办?
  • 我调试它并没有做任何事情 listview 是空白的
【解决方案2】:

你的 foreach 循环中的这段代码:

listView1.Items.Clear();

每次执行 foreach 语句时总是清除列表视图,在执行 foreach 语句后只在视图中添加 1 项。

我建议删除它。如果您需要清除它,请创建一个将清除列表并在某处调用该方法的方法,但绝对不应该在 foreach 语句中。

列表视图的实例化不能在 foreach 循环中。您可以在方法级别或类级别实例化它,以便清除列表中项目的单独方法能够引用它。

class Program
{
    static ListView listView1 = new ListView();
    static void Main(string[] args)
    {
        string[] files = Directory.GetFiles("C:\\testfiles");

        foreach (string file in files)
        {

            string fileName = Path.GetFileNameWithoutExtension(file);
            ListViewItem item = new ListViewItem(fileName);
            item.Tag = file;
            listView1.Items.Add(item);

        }
    }

    static void ClearList()
    {
        listView1.Items.Clear();
    }
}

【讨论】:

    【解决方案3】:

    试试下面的代码

            string[] files = Directory.GetFiles("plugins/");
            string fileName = "";
            foreach (string file in files)
            {
                fileName = Path.GetFileNameWithoutExtension(file)
                var item = new ListViewItem();
                item.Tag = file;
                item.Text = fileName;
                listView1.Items.Add(item);
            }
    

    【讨论】:

    • 严重代码描述项目文件行抑制状态错误CS0103当前上下文中不存在名称'file'
    • 抱歉,现在试试吧。
    • 它不会将项目添加到 listView :(
    • 你检查你的文件了吗?它包含什么?
    • 什么意思
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多