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

本文介绍了一个使用C#创建动态数量GroupBox的示例。通过自定义UserControl1控件并在FormMain窗体中根据传入的对象数组动态生成GroupBox,实现了详细信息的展示。每个GroupBox包含多个TextBox和Button,用于显示和操作数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

225419_NJoW_1425762.png

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

225752_Xom5_1425762.png

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右侧出现的滚动条滚动到最上方


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

230354_P7Yx_1425762.png

END

转载于:https://my.oschina.net/Tsybius2014/blog/546415

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值