2017-10-09 1 views
0

양식에 일부 컨트롤 (현재 텍스트 상자레이블)을 동적으로 추가하려고합니다. 그려야 할 세트의 수는 정해져 있지 않습니다. '동적으로 컨트롤 쌍을 추가하는 방법

내가 달성하고자하는 것의 예.

테이블에서 볼 수 있듯이 공간이 부족하여 오른쪽으로 이동합니다.

현재 FlowLayoutPanel 내에 TableLayoutPanel을 사용하고 있습니다.
Column 0label을 포함하고 column 1textbox을 포함합니다.

어떻게하면 FlowLayoutPanel에 테이블을 분할 할 수 있습니까?

private void Form1_Load(object sender, EventArgs e) 
{ 
    FlowLayoutPanel flp = new FlowLayoutPanel() 
    { 
     Location = new Point(0, 0), 
     Dock = DockStyle.Fill, 
     AutoSize = false, 
     FlowDirection = FlowDirection.TopDown, 
     AutoScroll = true, 
     BorderStyle = BorderStyle.Fixed3D, 
     WrapContents = true 
    }; 

    Controls.Add(flp); 

    TableLayoutPanel tlp = new TableLayoutPanel() 
    { 
     ColumnCount = 2, 
     Height = ClientSize.Height, 
     BackColor=Color.AliceBlue 
    }; 

    flp.Controls.Add(tlp); 

    for (int i = 0; i < 50; i++) 
    { 
     Label _label = new Label() 
     { 
      Text = i.ToString("00"), 
      AutoSize = true 
     }; 

     tlp.Controls.Add(_label, 0, i); 

     TextBox _textbox = new TextBox(); 
     tlp.Controls.Add(_textbox, 1, i); 
    } 
+0

사용 ['DataGridView']와 같은 동적으로 추가 필드 용으로 설계된 제어 (https://msdn.microsoft.com/en을 -us/library/system.windows.forms.datagridview (v = vs.110) .aspx)가 아니라 TableLayoutPanel입니다. –

답변

1

당신은 TableLayoutPanel 4 열을 가진 및 제어를위한 ColumnStyles에 적합한 설정 사용할 수 있습니다. 예

는 버튼 폼 패널을 넣고 모든 가장자리에 패널 앵커 세트. 그런 다음 핸들 버튼의 이벤트를 클릭하고이 코드를 사용합니다

private void button1_Click(object sender, EventArgs e) 
{ 
    var fields = new string[] { "A Field", "Some Field", "Another Field", 
     "A Long Field Name", "A Long Long Field Name" }; 
    var tlp = new TableLayoutPanel() { Dock = DockStyle.Fill, ColumnCount = 4 }; 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); 
    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 
    panel1.Controls.Add(tlp); 
    foreach (var item in fields) 
    { 
     tlp.Controls.Add(new Label() { Text = item, AutoSize = true }); 
     tlp.Controls.Add(new TextBox() { Dock = DockStyle.Fill }); 
    } 
} 

enter image description here

관련 문제