C# - 使用自定義控件動態生成多條數據的詳細信息展現

今天工做中遇到一個場景,有一個對象數組的內容,從後臺傳到前臺的C#程序中。須要用一個GroupBox展現每個對象的詳細信息,要求GroupBox的數量是能夠隨傳入對象的個數動態添加的,所以我設計了以下解決方案:c#

一、創建一個C#窗體應用程序MultiItemsDemo數組

二、將主窗體命名爲FormMain,裏面放置上下兩個Panel,上方Panel的Dock屬性爲Fill,下方Panel的Dock屬性爲Bottom。將panel1的AutoScroll屬性設置爲True。函數

三、創建一個自定義控件,這裏取名爲UserControl1this

四、在自定義控件的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;

五、在FormMain的構造函數中就能夠添加這些自定義控件了,下面這段代碼要放在VS自動生成的函數InitializeComponent後面:code

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),若是但願在生成這些控件後再對這些控件進行操做,能夠經過操做這個鏈表實現)orm

六、在Load函數中,必定要加上這兩句話:對象

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

第一句話的目的是讓焦點重新加入控件的文本輸入框中挪開,第二句話的目的是將panel1右側出現的滾動條滾動到最上方it


這些步驟執行完畢後,運行程序,效果以下圖所示:class

END

相關文章
相關標籤/搜索