我想构建一个包含100个标签和100个文本框的表单
我做的是:
dock
属性更改为填充 AutoScroll
属性更改为 True 我添加了40个标签和文本框,但我无法再添加,因为我无法垂直扩展表单和标签。
我可以最小化面板的大小,并出现垂直滚动条。 (也许这些信息可以帮助你帮助我。)
答案 0 :(得分:2)
具有许多文本框的数据输入窗口将需要滚动。因此,将Panel的AutoScrollMinSize属性设置为(1000,1000)作为第一个猜测。您将看到滚动条出现。它们也在设计时工作,允许您滚动面板并放置控件。您应该使用DataGridView btw的高赔率。
需要说明的事情:你可以让人类毫无错误地输入100个数据项的几率非常接近零。对于倒霉的用户来说,这是一个非常令人沮丧的工作,只需要10分钟或更长时间才能达到失败。创建一个用户友好的 UI,它可以按照可以成功完成的小步骤对数据输入作业进行分区。自动解决这个问题。
答案 1 :(得分:1)
将父表单的属性AutoSize
和AutoScroll
设置为 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