在用户控件中填充组合框

时间:2021-06-10 16:04:32

标签: c# winforms combobox

我正在尝试了解表单中 UserControl 的生命周期。以下是一个测试项目,但 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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

<块引用>

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();
相关问题