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

今天工作中遇到一个场景,有一个对象数组的内容,从后台传到前台的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#自定义控件滚动条的实现方法有多种。根据提供的引用内容,我可以为您提供以下方法和步骤来实现滚动条功能: 方法一: 1. 创建一个控件类,可以继承自Panel或者UserControl。该类将作为滚动条的容器。 2. 在该控件类中添加需要滚动的控件作为子控件。 3. 为该控件类添加滚动条控件,可以使用VScrollBar(竖向滚动条)或HScrollBar(横向滚动条)控件。 4. 设置滚动条控件的属性,如Maximum(可滚动范围的上限值)、SmallChange(小距离移动值)、LargeChange(大距离移动值)和Value(滚动条的当前位置)。 5. 给滚动条控件的Scroll事件添加处理方法,以便在滚动时对子控件进行相应操作。 方法二: 1. 创建一个视图类,为自定义控件动态添加滚动条,并处理滚动条的显示、隐藏和滚动事件。 2. 在该视图类的构造函数中传入自定义控件实例。 3. 在视图类中创建VScrollBar(竖向滚动条)和HScrollBar(横向滚动条)控件,并将其添加到自定义控件中。 4. 设置滚动条控件的属性,如Dock(使滚动条固定在底部或右侧)、Maximum(可滚动范围的上限值)和LargeChange(大距离移动值)。 5. 订阅滚动条控件的事件,如Scroll(滚动条发生滚动时触发事件)和MouseWheel(根据滚轮滚动方向滚动滚动条)。 6. 在事件处理方法中,根据滚动条的值和滚动方向,对自定义控件进行滚动操作。 以上是两种常见的实现滚动条功能的方法。您可以根据自己的需求选择其中一种或根据具体情况进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值