【问题标题】:Winforms - Controls in Panel are clippedWinforms - 面板中的控件被剪裁
【发布时间】:2011-12-23 03:35:08
【问题描述】:

我正在向 FlowLayoutpanel 控件动态添加控件。我添加到 flowlayoutpanel 的控件是包含两个控件的面​​板:一个不同大小的标签和一个固定大小的组合框。

问题在于标签和组合框在其包含面板中水平显示(我认为)。组合框被剪裁,几乎看不到。我尝试将每个面板的 Autosize 属性设置为 true,但这没有帮助。

有没有办法在面板中从上到下布局控件(堆叠它们)?流程布局面板可能是问题吗?

感谢您的帮助!

     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);
            }
        }

【问题讨论】:

  • 面板控件不提供自动布局。设置标签和组合的位置和大小属性。或使用用户控件。或者先在设计器中进行这项工作,然后查看设计器生成的代码以使其正确。
  • 谢谢.. 我认为用户控件是个好主意
  • @HansPassant 用户控制解决方案运行良好。如果您添加答案,我会选择它。
  • @Nick:你能分享代码吗?你是如何制作用户控件的

标签: c# winforms


【解决方案1】:

也许最好使用 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++;
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2016-05-27
    • 2018-01-10
    • 1970-01-01
    • 2016-07-27
    • 2010-12-29
    • 2016-05-05
    相关资源
    最近更新 更多