繁体   English   中英

在UserControl C#.NET中添加/停靠控件

[英]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到达顶部。 BringToFrontSendToBack或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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM