在用户控件中填充 ComboBox
Posted
技术标签:
【中文标题】在用户控件中填充 ComboBox【英文标题】:Populating ComboBox in User Control 【发布时间】:2021-08-27 16:12:10 【问题描述】:我试图了解表单中用户控件的生命周期。以下是一个测试项目,但是,UserControl1(通过设计器添加)正在显示,但 ComboBox1 中没有填充数据。 UserControl2 不显示(在 Form1 OnLoad 事件中添加),并且 UserControl3 不通过 Button 事件显示。任何帮助将不胜感激。
Form1 的代码如下:
using System;
using System.Windows.Forms;
namespace ComboBoxTest
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void Form2_Load(object sender, EventArgs e)
using (UserControl1 ucCtrl = new UserControl1())
groupBox2.Controls.Add(ucCtrl);
ucCtrl.BringToFront();
private void Button1_Click(object sender, EventArgs e)
using (UserControl1 ucCtrl = new UserControl1())
groupBox3.Controls.Clear();
groupBox3.Controls.Add(ucCtrl);
ucCtrl.BringToFront();
这是 UserControl1 的代码
using System;
using System.Data;
using System.Windows.Forms;
namespace ComboBoxTest
public partial class UserControl1 : UserControl
public UserControl1()
InitializeComponent();
PopulateComboBox();
private void PopulateComboBox()
using (DataTable dtData = new DataTable())
DataColumn dtCol;
DataRow dtRow;
dtCol = new DataColumn
DataType = typeof(Int32),
ColumnName = "Index"
;
dtData.Columns.Add(dtCol);
dtCol = new DataColumn
DataType = typeof(String),
ColumnName = "Option"
;
dtData.Columns.Add(dtCol);
for (int xI = 0; xI < 5; xI++)
dtRow = dtData.NewRow();
dtRow["Index"] = xI;
dtRow["Option"] = "Option " + Convert.ToString(xI);
dtData.Rows.InsertAt(dtRow, xI);
comboBox1.DataSource = dtData;
comboBox1.DisplayMember = "Option";
comboBox1.ValueMember = "Index";
comboBox1.SelectedIndex = 0;
【问题讨论】:
UserControl 的目的通常是封装一些控件的功能并将其“隐藏”起来。因此,该公司通常不会直接参与其中。理想情况下,您会“告诉”用户控件执行 GetReady 之类的操作,然后它会为您处理所有组件 删除 using 语句...控件在加载和点击事件中得到释放。 另一方面,PopulateComboBox
例程也会遇到同样的问题,当using
结束时,您的dtData
将被丢弃。跨度>
天啊,我的问题只是“使用”语句,现在一切正常。非常感谢扎格勒。如何标记正确答案?
【参考方案1】:
UserControl1(通过设计器添加)正在显示,但 ComboBox1 中没有填充数据。 UserControl2 不显示(在 Form1 OnLoad 事件中添加),并且 UserControl3 不通过 Button 事件显示
根本问题是因为您已将构造包装在 using
语句中。例如:
using (UserControl1 ucCtrl = new UserControl1())
groupBox2.Controls.Add(ucCtrl);
ucCtrl.BringToFront();
要解决您的问题,只需删除 using
语句,因为当它到达 using
的末尾时,用户控件已被丢弃。
例如上述(using
已删除):
UserControl1 ucCtrl = new UserControl1();
groupBox2.Controls.Add(ucCtrl);
ucCtrl.BringToFront();
【讨论】:
非常感谢 Zaggler,我在想 Form 或 UserControl 生命周期。现在一切都很好。 ???以上是关于在用户控件中填充 ComboBox的主要内容,如果未能解决你的问题,请参考以下文章