我正在编写一个UserControl,它以编程方式添加子控件。目前我正在添加如下的新控件:
this.Controls.Add(new Control() { Height = 16, Dock = DockStyle.Top });
我遇到的问题是在现有控件上方添加了新控件,所以我希望控件从上到下排序为1,2,3,4,5,6,它将它们排序为6, 5,4,3,2,1从上到下。
我想知道如何确保在所有现有控件(根据显示顺序)之后添加新控件。
而且,我想知道我是否可以在另外两个选定控件之间插入一个控件
我已尝试设置TabIndex,但这没有帮助!
答案 0 :(得分:3)
仅使用Winforms时,添加控件的顺序决定了它们的对接行为。
最后添加的控件将始终最接近停靠边框,即最靠近DockStyle.Top
。
BringToFront
或SendToBack
或Tab-order都不会改变这一点。
只需按相反顺序添加控件,或将其删除并重新添加。
答案 1 :(得分:1)
这是我的解决方案。基本上你将控件放在列表和容器中。然后你使用Bring to Front,因为所提到的几乎都是帖子。这当然也为您提供了插入的可能性。
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();
}
答案 2 :(得分:0)
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的位置和尺寸,然后根据这个设置新的位置。
答案 3 :(得分:0)
我知道这已经岁了,但是到底是什么。
您可以使用SetChildIndex方法控制此项,如下所示
var someControl = new UserControl();
someControl.Dock = DockStyle.Top;
MainForm.Controls.Add(someControl);
MainForm.Controls.SetChildIndex(someControl, 0);
来源:http://tipsntricksbd.blogspot.com/2009/10/c-dynamically-adding-control-with.html