C#显示基于名称的组件
本文关键字:组件 于名 显示 | 更新日期: 2023-09-27 18:29:23
是否可以根据名称设置组件可见属性?如果你想这样称呼它们,我有12个"主"组件(组合框),根据这些组件中的选择,我想显示1到16个文本框。它们按数字顺序命名,如combobox1_textbox_0、combobox2_textbox_1等等。理想情况下,我想做的是获取combobox的索引,并将其作为参数传递给一个方法,该方法根据传递给该方法的索引将textboxes visible属性设置为visible/hidden。
这可能吗?在伪代码或你称之为的代码中,我希望它能像这样工作:
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;
}
}
}
我可以为选择做面板或其他事情,但由于组合框中的所有选择都将使用相同的文本框,但数量不同,为每个可能的选择制作面板似乎需要做很多工作,更不用说以后很难扩展程序了。
假设您使用的是Windows窗体而不是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.
我将建议您的方法的替代方案,可能不是您想要的:
将组合框放在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;
}