创建一个以控件为元素的类,并在运行时动态地填充这些控件
本文关键字:控件 动态 运行时 填充 一个以 元素 创建 | 更新日期: 2023-09-27 17:53:21
使用c#与MS visual studio创建窗口表单,我想创建一个表单,有20个其他表单被加载取决于从组合框的选择。所有这些被加载的表单共享一些共同的TextBox/Combobox,例如
格式1:
动态添加TextBox username/dept/Dept_manager和Comboboxdept_location/dept_code/Num_of_washroom
格式2:
动态添加TextBox username/dept/Dept_manager和Comboboxdept_location/
dept_code/Num_of_washroom/dept_ID
form 3:
动态添加TextBox用户名/
dept/Dept_manager/Dept_code和Combobox dept_location/Dept_code/Num_of_washroom
…
问题是:而不是在嵌套的if语句中硬编码所有的文本框/组合框:
if (combobox.text == "NewYork")
{
TextBox dept = new TextBox();
dept.location = ...
dept.size = ...
}
是否有更好的方法来管理这些(即类)?使用20个表单和10多个控件,硬编码将创建不必要的大字节
我试图提供简单的代码,但未能使自己清楚我想要什么。
可以这样解析:
1)创建,设置可见folse和添加所有可能的控件(文本框等)在FlowLayoutPanel的设计时间或在表单初始化。流量面板将自动处理控件放置。
2)为每个配置创建/加载包含活动控件名称的特殊表
3)当组合框项被选中时,应用选定的配置(设置可见控件)使用控件的"Name"属性来识别控件:
public class OfficeFormsConfig
{
public string Name { get; set; }
public string[] @Fields { get; set; }
public override string ToString()
{
return Name;
}
}
void FillOfficesCombo()
{
var arrViewConfigs = new List<OfficeFormsConfig>();
//---Load from DB or File (but here is hard coded as an example)-
arrViewConfigs.Add(new OfficeFormsConfig()
{
Name = "NewYork",
@Fields = new string[] { "username", "dept", "deptManager", "dept_location" }
});
arrViewConfigs.Add(new OfficeFormsConfig()
{
Name = "Denver",
@Fields = new string[] { "username", "deptManager", "Num_of_washroom" }
});
//---------------------------------------------------------------
foreach (var config in arrViewConfigs)
{
comboBox1.Items.Add(config);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
OfficeFormsConfig cfg = comboBox1.SelectedItem as OfficeFormsConfig;
foreach (Control ctl in flowLayoutPanel1.Controls)
{
ctl.Visible = cfg.Fields.Any(ctlName => ctlName == ctl.Name);
}
}