簡體   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