使用自定义控件动态生成多条数据的详细信息展示

今天工作中遇到一个场景,有一个对象数组的内容,从后台传到前台的C#程序中。需要用一个GroupBox展示每一个对象的详细信息,要求GroupBox的数量是可以随传入对象的个数动态添加的,因此我设计了如下解决方案:

1、建立一个C#窗体应用程序MultiItemsDemo

2、将主窗体命名为FormMain,里面放置上下两个Panel,上方Panel的Dock属性为Fill,下方Panel的Dock属性为Bottom。将panel1的AutoScroll属性设置为True。

使用自定义控件动态生成多条数据的详细信息展示

3、建立一个自定义控件,这里取名为UserControl1

使用自定义控件动态生成多条数据的详细信息展示

4、在自定义控件的Designer文件中,将各个控件的可见性约束从private改为public

public System.Windows.Forms.GroupBox groupBox1;
public System.Windows.Forms.Button button1;
public System.Windows.Forms.Label label4;
public System.Windows.Forms.TextBox textBox4;
public System.Windows.Forms.Label label3;
public System.Windows.Forms.TextBox textBox3;
public System.Windows.Forms.Label label2;
public System.Windows.Forms.TextBox textBox2;
public System.Windows.Forms.Label label1;
public System.Windows.Forms.TextBox textBox1;

5、在FormMain的构造函数中就可以添加这些自定义控件了,下面这段代码要放在VS自动生成的函数InitializeComponent后面:

int count = 5;
for (int i = count - 1; i >= 0; i--)
{
    UserControl1 userControl1 = new UserControl1();
    userControl1.Parent = panel1;
    userControl1.Dock = DockStyle.Top;
    userControl1.groupBox1.Text = "GROUPBOX - " + i.ToString();
    userControl1.textBox1.Text = "TEXT1 - " + i.ToString();
    userControl1.textBox2.Text = "TEXT2 - " + i.ToString();
    userControl1.textBox3.Text = "TEXT3 - " + i.ToString();
    userControl1.textBox4.Text = "TEXT4 - " + i.ToString();
    userControl1.button1.Click += (obj, arg) =>
        {
            MessageBox.Show(userControl1.groupBox1.Text);
        };
    list.AddFirst(userControl1);
}
panel1.AutoScroll = true;

(由于这只是个Demo,并没有写将对象的值逐一赋到自定义控件中各字段的代码,list为一个链表(LinkedList),如果希望在生成这些控件后再对这些控件进行操作,可以通过操作这个链表实现)

6、在Load函数中,一定要加上这两句话:

this.btnOper.Select();
panel1.VerticalScroll.Value = 0;

第一句话的目的是让焦点从新加入控件的文本输入框中挪开,第二句话的目的是将panel1右侧出现的滚动条滚动到最上方

这些步骤执行完毕后,运行程序,效果如下图所示:

使用自定义控件动态生成多条数据的详细信息展示

END

你可能感兴趣的:(C#,多条数据展示,动态添加控件)