Windows窗体不能添加更多组件
本文关键字:组件 添加 窗体 不能 Windows | 更新日期: 2023-09-27 18:14:00
我想建立一个有100个标签和100个文本框的表单
我所做的是:
- 添加新表单
- 使用拖拽方式将面板添加到表单中
- 将面板的
dock
属性更改为填充 - 将
AutoScroll
属性更改为True - 开始使用拖放方式添加标签和文本框
我添加了大约40个标签和文本框,但是我不能再添加了,因为我不能垂直展开表单和标签。
注意
我可以最小化面板的大小,然后出现一个垂直滚动条。
设置父窗体的属性AutoSize
和AutoScroll
为true。然后禁用面板对接。通过这种方式,您可以设置面板和滚动表单内容的任意大小以添加新控件。面板设计完成后,将对接设置为重新填充
或者您可以使用属性面板设置新添加控件的位置。这将把控件移动到面板上合适的位置。
有那么多文本框的数据输入窗口将需要滚动。因此,将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