是否可以根据名称设置组件可见属性? 我有12个“主”组件(组合框),如果你想调用它们,并根据这些中的选择我想显示1到16个文本框的任何地方。它们以数字顺序命名,例如combobox1_textbox_0,combobox1_textbox_1等。我理想的做法是取组合框的索引并将其作为参数传递给一个方法,该方法根据传递给方法的索引将文本框可见属性设置为可见/隐藏。
这可能吗?在伪代码或你所谓的它我希望它能像这样工作:
private void methodToSetVisibleAttribute(int indexFromMainComboBox)
{
for(int i = 0; i < 15; i++)
{
if(i < index)
{
combobox1_textbox_+i.Visible = true;
}
else
{
combobox1_textbox_+i.Visible = false;
}
}
}
我可以选择面板或其他东西进行选择,但是看到组合框中的所有选择都将使用相同的文本框,但是以不同的数量,为每个可能的选择制作面板似乎有很多工作,更不用说难以扩展了该计划后来。
答案 0 :(得分:1)
假设您使用的是Windows Forms而非WPF,则可以使用ControlCollection.Find()
按名称查找控件:
var textBox = this.Controls.Find(string.Format("combobox1_textbox_{0}", i), true).OfType<ComboBox>().FirstOrDefault();
if (textBox != null)
textBox.Visible = (i < index);
else
Debug.Assert(false, "textbox not found"); // Or throw an exception if you prefer.
答案 1 :(得分:1)
我建议您采用替代方法,或许不是您正在寻找的方法:
将您的组合框放在List<ComboBox>
中,然后您可以通过索引编号访问它们。
List<ComboBox> myCombos = new List<ComboBox>();
for (int i = 0; i < 16; i++)
{
ComboBox cb = new ComboBox();
//do what ever you need to do here. Set its location, add items, etc.
Form1.Controls.Add(cb); //Alternatively add it to another container.
myCombos.Add(cb); //Now it's in a list.
}
像这样修改它们:
for(int i = 0; i < 15; i++)
{
if(i < index)
{
myCombos[i].Visible = true;
}
else
{
myCombos[i].Visible = false;
}
}
甚至更加谦逊:
for(int i = 0; i < 15; i++)
{
myCombos[i].Visible = i < index;
}