我正在编写一个以编程方式添加子控件的UserControl。目前我正在添加新的控件,如下所示:
this.Controls.Add(new Control() { Height = 16, Dock = DockStyle.Top });我遇到的问题是在现有控件之上添加了新控件,所以我希望控件从上到下排序为1,2,3,4,5,6,它从上到下排序为6,5,4,3,2,1。
我想知道如何确保在所有现有控件之后添加新控件(根据显示顺序)。
此外,我还想知道是否可以在其他两个选定的控件之间插入一个控件
我试过设置TabIndex,但是没有用!
发布于 2013-01-22 18:55:07
使用Winforms时,只有添加控件的顺序才能确定它们的停靠行为。
最后添加的控件将始终最接近停靠边框,即使用DockStyle.Top位于顶部。无论是BringToFront、SendToBack还是Tab键顺序都不会改变这一点。
只需以相反的顺序添加您的控件,或者删除它们并重新添加它们。
发布于 2013-01-22 19:03:01
这是我对此的解决方案。基本上,您将控件和容器放在一个列表中。然后你使用带到前面,正如前面提到的,几乎都是帖子。当然,这也提供了插入的可能性。
Panel control1 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.Red};
this.Controls.Add(control1);
Panel control2 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.White };
this.Controls.Add(control2);
Panel control3 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.Black };
this.Controls.Add(control3);
Panel control4 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.Yellow };
this.Controls.Add(control4);
Panel control5 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.Blue };
this.Controls.Add(control5);
Panel control6 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.Green };
this.Controls.Add(control6);
PanelList.Clear();
PanelList.Add(control1);
PanelList.Add(control2);
PanelList.Add(control3);
PanelList.Add(control4);
PanelList.Add(control5);
PanelList.Add(control6);
Panel control7 = new Panel() { Height = 16, Dock = DockStyle.Top, BackColor = Color.Pink };
this.Controls.Add(control7);
PanelList.Insert(3, control7);
for (int i = 0; i < PanelList.Count; i++)
{
PanelList[i].BringToFront();
}发布于 2013-01-22 18:34:30
private Int32 m_OffsetY = 0;
private Int32 m_MarginY = 10;
private void AddControl(Control control)
{
SuspendLayout();
Controls.Add(control);
control.Location = new Point(m_OffsetX, m_OffsetY);
ResumeLayout();
m_OffsetY += control.Height + m_MarginY;
}
// ...关于控件插入的问题...这是不可能的,因为控件的位置取决于它们添加到窗体中的顺序。但是,如果您有布局空间,则可以在两个控件之间物理地插入一个控件...您可以计算ctrl1和ctrl2的位置和尺寸,并根据此设置新位置。
https://stackoverflow.com/questions/14456341
复制相似问题