【问题标题】:How can I loop through the selected listview item如何遍历选定的列表视图项
【发布时间】:2015-05-16 00:01:02
【问题描述】:

当我双击我选择的列表视图项时,我可以使用以下代码轻松获取每个值并将它们设置在文本框中。

        ListViewItem item = listView1.SelectedItems[0];

        entry_txtBox.Text = item.Text;
        name_txtBox.Text = item.SubItems[1].Text;

但我宁愿遍历所选项目并将每个列名称与每个文本框标签进行比较。如果它们匹配,则将列值设置为文本框。

这是我目前所拥有的。

        foreach (Control c in this.Controls)
        {
            foreach (Control childc in c.Controls)
            {
                foreach (ColumnHeader header in listView1.Columns) // This should be the selected item.
                {
                    if (childc is TextBox && header == childc.Tag)
                    {
                        // Fill Textboxes
                    }
                }
            }
        }

我的问题是如何循环遍历每个列标题并将它们与文本框标签进行比较。

【问题讨论】:

    标签: c# listview


    【解决方案1】:

    首先,您可以使用良好的旧递归通过遍历控件树来构建所有控件的平面列表:

    var controls = GetControls(parent);
    
    public IEnumerable<Control> GetControls(Control parent)
    {
        foreach(var control in parent.Controls)
        {
            yield return control;
            var childControls = GetControls(control);
            foreach(var child in childControls)
            {
                yield return child;
            }
        }
    }
    

    然后只做一个 LINQ 来过滤:

    var textBoxControls = controls.Select(c => c is TextBox && header == TextBox.ID); //Or whatever condition you want to use.
    

    【讨论】:

    • 我对递归不是很熟悉,但我会看看它。
    猜你喜欢
    • 2011-07-17
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多