【发布时间】:2021-08-31 06:34:16
【问题描述】:
我正在尝试在每次按下按钮时向面板添加一个带有停靠样式顶部的新面板。每次我按下按钮时,面板都会创建并添加到父级,但即使将停靠样式设置为顶部,它们总是会添加到完全相同的位置。 我尝试使用 BringToFront 对其进行调整,但这没有任何区别。 在我可以使用 DockStyle 之前,我是否必须对父面板应用某种布局?
这是我的代码:
private void AddInputLine()
{
this.ButtonFileDialog.Add(this.CreateFileBrowserButton());
this.TextBoxInput.Add(this.CreateInputTextBox());
System.Drawing.Size buttonSize = new System.Drawing.Size(this.TextBoxInput[^1].Size.Height, this.TextBoxInput[^1].Size.Height);
this.ButtonFileDialog[^1].MinimumSize = buttonSize;
this.ButtonFileDialog[^1].MaximumSize = buttonSize;
this.FormatPanels.Add(new Panel());
this.FormatPanels[^1].Controls.Add(this.TextBoxInput[^1]);
this.TextBoxInput[^1].BringToFront();
this.FormatPanels[^1].Controls.Add(this.ButtonFileDialog[^1]);
this.ButtonFileDialog[^1].BringToFront();
this.PanelRightSide.Controls.Add(this.FormatPanels[^1]);
this.FormatPanels[^1].Dock = DockStyle.Top;
}
【问题讨论】:
-
我建议您使用表单设计器,手动拖放面板并设置它们的属性。然后转到 Form1.designer.cs 文件并从那里复制生成的代码,并使用该代码动态填充面板。 ps
^1是怎么回事? -
谢谢,我想我必须这样做...... ^1 表示索引是向后读取的,因此它获取列表的最后一个元素。
-
不要滥用索引器,而是使用您刚刚创建的对象的实际实例,然后验证您实际带到前面的内容和对接的内容:不是同一个对象。 --
BringToFront()/SendToBack()布局功能适用于停靠控件,而不是其子控件。 -- 我建议使用 FlowLayoutPanel 或 TableLayoutPanel 来简化/自动化这种布局。 -
您添加的最后一个在顶部。所以你可能意味着 this.FormatPanels[^1].BringToFront() 让它附加。是的,当您使用变量来存储面板引用时,它变得更具可读性。