Windows窗体不能添加更多组件

本文关键字:组件 添加 窗体 不能 Windows | 更新日期: 2023-09-27 18:14:00

我想建立一个有100个标签和100个文本框的表单

我所做的是:

  1. 添加新表单
  2. 使用拖拽方式将面板添加到表单中
  3. 将面板的dock属性更改为填充
  4. AutoScroll属性更改为True
  5. 开始使用拖放方式添加标签和文本框

问题

我添加了大约40个标签和文本框,但是我不能再添加了,因为我不能垂直展开表单和标签。

注意

我可以最小化面板的大小,然后出现一个垂直滚动条。

Windows窗体不能添加更多组件

设置父窗体的属性AutoSizeAutoScrolltrue。然后禁用面板对接。通过这种方式,您可以设置面板和滚动表单内容的任意大小以添加新控件。面板设计完成后,将对接设置为重新填充

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

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

需要说明的是:你能让一个人毫无错误地输入100个数据项的几率非常接近于零。对于不幸的用户来说,这是一项非常令人沮丧的工作,他将花费10分钟或更长时间才到达失败。创建一个用户友好的 UI,该UI将数据输入作业划分为可成功完成的小步骤。自动解决这个问题

这是我用来向表单添加未知数量控件的示例方法。窍门是一个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);
            }
        }

我的意思和meanggreen完全一样,但他是第一位的。我已经创建了示例解决方案:https://www.amazon.com/clouddrive/share?s=i9N7raPPQPEjOdHPRn99uE