2011-11-06 68 views
1

我正在動態地將控件添加到FlowLayoutpanel控件。我添加到flowlayoutpanel的控件是包含兩個控件的面​​板:不同大小的標籤和固定大小的組合框。Winforms - 面板中的控件被修剪

問題是標籤和組合框水平顯示在其包含面板(以及我認爲)。組合框被裁剪並幾乎看不見。我已經嘗試將每個面板的Autosize屬性設置爲true,但這沒有幫助。

有沒有一種方法來從上到下佈局控制面板(堆疊它們)? flowlayoutpanel是否會成爲問題?

感謝您的幫助!

 private void PopulateQuestionFlowPanel() 
     { 
      foreach (var question in _viewModel.Questions) 
      { 
       //build question label 
       var questionLabel = new Label(); 
       questionLabel.Text = question.Text; 
       questionLabel.Tag = question.Id; 

       //build answer combobox 
       var answerCombo = CreateQuestionComboBox(question); 

       //put question and answer into panel    
       var controlPanel = new Panel(); 
       controlPanel.Tag = question.Id; 
       controlPanel.AutoSize = true; 
       controlPanel.Controls.Add(questionLabel); 
       controlPanel.Controls.Add(answerCombo); 

       //add panels to flowpanel 
       questionPanel.Controls.Add(controlPanel); 
      } 
     } 
+2

Panel控件不提供自動佈局。設置標籤和組合的位置和大小屬性。或者使用UserControl。或者先在設計人員中完成這項工作,然後查看設計人員生成的代碼以獲得正確的結果。 –

+0

謝謝..我認爲usercontrol是一個好主意 – Nick

+0

@HansPassant用戶控制解決方案很好地工作。如果你添加一個答案,我會選擇它。 – Nick

回答

0

也許這是最好使用一個TableLayoutPanel,並刪除所有列的比你能做到這一點:

int i = 0; 
foreach (var question in _viewModel.Questions) 
      { 
       //build question label 
       var questionLabel = new Label(); 
       questionLabel.Text = question.Text; 
       questionLabel.Tag = question.Id; 

       //build answer combobox 
       var answerCombo = CreateQuestionComboBox(question); 

       //put question and answer into panel    
       var controlPanel = new Panel(); 
       controlPanel.Tag = question.Id; 
       controlPanel.AutoSize = true; 
       controlPanel.Controls.Add(questionLabel); 
       controlPanel.Controls.Add(answerCombo); 

       //add panels to flowpanel 
       tableLayoutPanel1.SetRow(controlPanel, i); 
       tableLayoutPanel1.RowCount = i++; 
      }