今天工做中遇到一個場景,有一個對象數組的內容,從後臺傳到前臺的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