首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UserControl C# .NET中添加/停靠控件

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

Stack Overflow用户
提问于 2013-01-22 18:25:56
回答 4查看 2.8K关注 0票数 3

我正在编写一个以编程方式添加子控件的UserControl。目前我正在添加新的控件,如下所示:

代码语言:javascript
复制
this.Controls.Add(new Control() { Height = 16, Dock = DockStyle.Top });

我遇到的问题是在现有控件之上添加了新控件,所以我希望控件从上到下排序为1,2,3,4,5,6,它从上到下排序为6,5,4,3,2,1。

我想知道如何确保在所有现有控件之后添加新控件(根据显示顺序)。

此外,我还想知道是否可以在其他两个选定的控件之间插入一个控件

我试过设置TabIndex,但是没有用!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-22 18:55:07

使用Winforms时,只有添加控件的顺序才能确定它们的停靠行为。

最后添加的控件将始终最接近停靠边框,即使用DockStyle.Top位于顶部。无论是BringToFrontSendToBack还是Tab键顺序都不会改变这一点。

只需以相反的顺序添加您的控件,或者删除它们并重新添加它们。

票数 3
EN

Stack Overflow用户

发布于 2013-01-22 19:03:01

这是我对此的解决方案。基本上,您将控件和容器放在一个列表中。然后你使用带到前面,正如前面提到的,几乎都是帖子。当然,这也提供了插入的可能性。

代码语言:javascript
复制
    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();
    }
票数 1
EN

Stack Overflow用户

发布于 2013-01-22 18:34:30

代码语言:javascript
复制
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的位置和尺寸,并根据此设置新位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14456341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档