【问题标题】:how to grab subitems with checkboxes in listview如何在列表视图中使用复选框抓取子项
【发布时间】:2012-06-06 05:04:03
【问题描述】:

我目前正在尝试从每个选中的列表视图项中的一列中获取所有子项,并将它们显示在 Richtextbox 中,但我不知道该怎么做。这是我当前的代码。

我也在 ItemChecked 事件中尝试这样做。

        foreach (ListViewItem item in listView1.Items)
        {
            if (listView1.CheckedItems.Count > 0)
            {
                richTextBox2.Text = listView1.CheckedItems[0].SubItems[1].Text;

            }
        }

我认为这会起作用,但显然不行。感谢所有帮助!

【问题讨论】:

    标签: c# winforms listview listviewitem


    【解决方案1】:

    您正在替换每个循环中文本框的内容。尝试使用+= 附加文本。您还需要选择正确的项目

    richTextBox2.Text = String.Empty;
    foreach (ListViewItem item in listView1.Items)
    {
        if (item.Checked)
        {
            richTextBox2.Text += item.SubItems[1].Text + Environment.NewLine;
        }
    }
    

    您也可以使用 LINQ 表达式和 String.Join 编写此代码

    richTextBox2.Text = String.Join(Environment.NewLine,
        from item in listView1.Items.OfType<ListViewItem>()
        where item.Checked
        select item.SubItems[1].Text);
    

    【讨论】:

    • 行得通!但是当我只检查一个项目时,它会同时写入 RichTextBox 并在我取消选中它时继续写入。我在 ItemChecked 事件中做这一切,我忘了提到。
    • 使用 LINQ 表达式时出现此错误找不到源类型“System.Windows.Forms.ListView.ListViewItemCollection”的查询模式的实现。 '哪里' 没有找到。考虑明确指定范围变量“item”的类型。
    • @IanLundberg,修复了这两个问题,在第一个示例中,在循环之前先清除文本。第二个,.OfType&lt;ListViewItem&gt;() 将集合项转换为正确的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多