当我双击我选择的列表视图项时,我可以轻松获取每个值,并使用以下代码在文本框中设置它们。
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
}
}
}
}
我的问题是如何循环每个列标题并将它们与文本框标记进行比较。
答案 0 :(得分: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.