2017-06-19 49 views
1

我正在使用以下代码在FlowLayoutPanel(win窗体 - c#)内动态生成控件。我想在内部foreach完成后添加换行符。 var fullText = textBox1.Text;FlowLayoutPanel中的新行

 List<string> listPoints = fullText.Split('#').ToList(); 

     foreach (var listPoint in listPoints) 
     { 
      if (listPoint.Contains('^')) 
      { 
       var listTextboxes = listPoint.Split('^'); 
       int textBoxCount = listTextboxes.Count(); 
       int index = 1; 
       foreach (var listTextbox in listTextboxes) 
       { 
        CheckBox ck = new CheckBox(); 
        ck.Text = listTextbox; 
        ck.AutoSize = true; 
        ck.CheckStateChanged += new EventHandler(this.CheckBox_CheckedChanged); 
        flowLayoutPanel1.Controls.Add(ck); 

        if (index < textBoxCount) 
        { 
         TextBox tb = new TextBox(); 
         tb.AutoSize = true; 
         tb.TextChanged += new EventHandler(this.TextBox_TextChanged); 
         flowLayoutPanel1.Controls.Add(tb); 
        } 
        index++; 
       } 

       // code for New line break 
      } 
      else 
      { 
       CheckBox ck = new CheckBox(); 
       ck.Text = listPoint; 
       ck.AutoSize = true; 
       ck.CheckStateChanged += new EventHandler(this.CheckBox_CheckedChanged); 
       flowLayoutPanel1.Controls.Add(ck); 

       flowLayoutPanel1. 
      } 

回答

2

使用SetFlowBreak方法:

Control lastControl = null; 
if (listPoint.Contains('^')) { 
    var listTextboxes = listPoint.Split('^'); 
    int textBoxCount = listTextboxes.Count(); 
    int index = 1; 
    foreach (var listTextbox in listTextboxes) { 
    CheckBox ck = new CheckBox(); 
    ck.Text = listTextbox; 
    ck.AutoSize = true; 
    ck.CheckStateChanged += new EventHandler(this.CheckBox_CheckedChanged); 
    flowLayoutPanel1.Controls.Add(ck); 

    if (index < textBoxCount) { 
     TextBox tb = new TextBox(); 
     tb.AutoSize = true; 
     tb.TextChanged += new EventHandler(this.TextBox_TextChanged); 
     flowLayoutPanel1.Controls.Add(tb); 
     lastControl = tb; 
    } else { 
     lastControl = ck; 
    } 
    index++; 
    } 
    if (lastControl != null) { 
    flowLayoutPanel1.SetFlowBreak(lastControl, true); 
    }