[英]Adding/Docking controls in UserControl C# .NET
我正在编写一个UserControl,它以编程方式添加子控件。 目前,我正在添加新的控件,如下所示:
this.Controls.Add(new Control() { Height = 16, Dock = DockStyle.Top });
我遇到的问题是,在现有控件的上方添加了新控件,因此我希望将控件从上到下按顺序排列为1、2、3、4、5、6,将它们按6、5、4排序,3、2、1从上到下。
我想知道如何确保在所有现有控件之后添加一个新控件(按照显示顺序)。
而且,我想知道是否可以在其他两个选定的控件之间插入一个控件
我尝试设置TabIndex,但这没有帮助!
使用Winforms时,只有添加控件的顺序才能确定它们的对接行为。
最后添加的控件将始终最接近停靠边框,即使用DockStyle.Top
到达顶部。 BringToFront
或SendToBack
或Tab顺序都不会更改此设置。
只需以相反的顺序添加您的控件,或者将其删除并再次添加即可。
这是我的解决方案。 基本上,您将控件以及容器都放在列表中。 然后,您可以使用前面提到的几乎所有帖子。 当然,这也使您可以插入。
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();
}
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的位置和尺寸,并据此设置新控件的位置。
我知道这已经几岁了,但是到底。
您可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.