背景:在做项目的时候可能需要根据一定数量创建某些控件并修改其属性,本文以控件label、ConboBox控件进行动态创建。
程序运行前后的的Form动态图
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace C__动态创建label和combobox控件
{public partial class Form1 : Form{private List<KeyValuePair<Label, ComboBox>> dynamicControls;public Form1(){dynamicControls = new List<KeyValuePair<Label, ComboBox>>();InitializeComponent();CreateDynamicControls();}private void CreateDynamicControls(){for(int i=0;i<6;i++){Label label = new Label();label.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);label.Text = $"相机{i + 1}";label.Location = new System.Drawing.Point(50, 10 + i * 30);ComboBox comboBox = new ComboBox();comboBox.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);comboBox.Items.AddRange(new object[] { "Option 1", "Option2", "Option3" });comboBox.DropDownStyle = ComboBoxStyle.DropDownList;comboBox.Location = new System.Drawing.Point(150, 10 + i * 30);comboBox.Width = 500;this.Controls.Add(label);this.Controls.Add(comboBox);dynamicControls.Add(new KeyValuePair<Label, ComboBox>(label, comboBox));}}//保存动态控件的文本信息private void SaveDynamicControlText(){foreach (var pair in dynamicControls){Console.WriteLine($"Label:{pair.Key.Text},ComboBox:{pair.Value.SelectedItem}");}}}
}
源代码下载
下载链接腾讯云盘
https://share.weiyun.com/ouZjoUzF
获取List列表中的Text
List<KeyValuePair<Label, ComboBox>> dynamicControls 怎么获取combobox中text属性或者Label中的text?
遍历列表
如果使用C#,并且假设Label和ComboBox是Windows Forms相关的控件类型。首先需要遍历dynamicControls列表。
以下是示例代码:
foreach (KeyValuePair<Label, ComboBox> pair in dynamicControls)
{ // 获取ComboBox中的Text属性 string text = pair.Value.Text; string textlabel=pair.key.Text;// 这里可以对获取到的text进行进一步处理,比如输出或者存储等操作 Console.WriteLine(text);
}
错误处理
在实际应用中,需要确保ComboBox已经被正确初始化并且有值。如果在获取Text属性之前ComboBox没有被正确设置值,可能会得到空字符串或者引发异常。
例如,可以在获取Text属性之前先检查ComboBox是否有SelectedItem:
foreach (KeyValuePair<Label, ComboBox> pair in dynamicControls)
{ string textlabel=pair.key.Text;if (pair.Value.SelectedItem!= null) { string text = pair.Value.Text; Console.WriteLine(text); } else { // 可以进行相应的提示或者处理逻辑,比如记录日志等 Console.WriteLine("ComboBox has no selected item."); }
}
List<KeyValuePair<Label, ComboBox>> dynamicControls combobox添加多个值后在combobox上显示
创建和初始化ComboBox
首先,假设你已经有了List<KeyValuePair<Label, ComboBox>>类型的dynamicControls。对于每个ComboBox,你可以使用Items.Add方法来添加多个值。
例如:
foreach (var controlPair in dynamicControls)
{ ComboBox comboBox = controlPair.Value; comboBox.Items.Add("Value1"); comboBox.Items.Add("Value2"); comboBox.Items.Add("Value3");
}
设置显示属性
如果要让ComboBox显示添加的值,通常它会默认显示第一个添加的值。如果要设置特定的显示值,可以使用SelectedIndex属性。
例如,如果要显示第二个添加的值(索引为1,因为索引从0开始):
foreach (var controlPair in dynamicControls)
{ ComboBox comboBox = controlPair.Value; comboBox.SelectedIndex = 1;
}
List<KeyValuePair<Label, ComboBox>> dynamicControls 点击事件为什么只有一个控件响应该事件?
正确的解决办法
private void ImageSetting_Load(object sender, EventArgs e){ foreach (var ClickPair in dynamicControls){ClickPair.Value.Click += new EventHandler(comboBox_Click);}LoadFrameSeriaml();}