Windows窗体无法添加更多组件

时间:2014-07-22 11:42:30

标签: c# winforms windows-forms-designer

我想构建一个包含100个标签和100个文本框的表单

我做的是:

  1. 添加新表单
  2. 使用拖放功能将面板添加到该表单
  3. 将该面板的dock属性更改为填充
  4. AutoScroll属性更改为 True
  5. 使用拖放操作开始添加标签和文本框
  6. 问题

    我添加了40个标签和文本框,但我无法再添加,因为我无法垂直扩展表单和标签。

    注意

    我可以最小化面板的大小,并出现垂直滚动条。 (也许这些信息可以帮助你帮助我。)

4 个答案:

答案 0 :(得分:2)

具有许多文本框的数据输入窗口将需要滚动。因此,将Panel的AutoScrollMinSize属性设置为(1000,1000)作为第一个猜测。您将看到滚动条出现。它们也在设计时工作,允许您滚动面板并放置控件。您应该使用DataGridView btw的高赔率。

需要说明的事情:你可以让人类毫无错误地输入100个数据项的几率非常接近零。对于倒霉的用户来说,这是一个非常令人沮丧的工作,只需要10分钟或更长时间才能达到失败。创建一个用户友好的 UI,它可以按照可以成功完成的小步骤对数据输入作业进行分区。自动解决这个问题。

答案 1 :(得分:1)

将父表单的属性AutoSizeAutoScroll设置为 true 。然后禁用面板的停靠。这样,您可以将任何大小设置为面板并滚动表单内容以添加新控件。完成面板设计后,再将对接设置为填充

或者您可以使用“属性”面板为新添加的控件设置位置。这会将控件移动到面板上的适当位置。

答案 2 :(得分:0)

这是我用来向表单添加未知数量的控件的示例方法。诀窍是FlowLayoutPanel。

如前所述:您不希望在页面上手动添加100个控件。

private void AddMappingControls() {

            HeaderFlowLayoutPanel.Controls.Clear();
            MappingFlowLayoutPanel.Controls.Clear();

            Label sourceHeaderLabel = new Label();
            sourceHeaderLabel.Text = "Velden in Excel (bron)";
            sourceHeaderLabel.Name = "BronLabel";
            sourceHeaderLabel.Width = MappingFlowLayoutPanel.Width / 2 - 20;
            HeaderFlowLayoutPanel.Controls.Add(sourceHeaderLabel);

            Label destinationHeaderLabel = new Label();
            destinationHeaderLabel.Text = "Velden in Word sjabloon (bestemming)";
            destinationHeaderLabel.Name = "BestemmingLabel";
            destinationHeaderLabel.Width = MappingFlowLayoutPanel.Width / 2 - 20;
            HeaderFlowLayoutPanel.Controls.Add(destinationHeaderLabel);

            foreach (string destination in this.destinationFields) {

                ComboBox sourceFieldComboBox = new ComboBox();
                sourceFieldComboBox.BindingContext = new System.Windows.Forms.BindingContext();
                sourceFieldComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
                //sourceFieldComboBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                sourceFieldComboBox.Name = destination + "ComboBox";
                sourceFieldComboBox.ValueMember = destination;
                sourceFieldComboBox.DataSource = this.sourceFields;
                sourceFieldComboBox.Width = MappingFlowLayoutPanel.Width / 2 - 20;
                MappingFlowLayoutPanel.Controls.Add(sourceFieldComboBox);

                Label nameLabel = new Label();
                nameLabel.Text = destination;
                nameLabel.Name = destination + "Label";
                nameLabel.Width = MappingFlowLayoutPanel.Width / 2 - 20;
                MappingFlowLayoutPanel.Controls.Add(nameLabel);
            }
        }

答案 3 :(得分:0)

我的意思与MeanGreen完全相同,但他是第一个。我创建了示例解决方案:https://www.amazon.com/clouddrive/share?s=i9N7raPPQPEjOdHPRn99uE