3

プログラムで子コントロールを追加する UserControl を作成しています。現在、次のような新しいコントロールを追加しています。

this.Controls.Add(new Control() { Height = 16, Dock = DockStyle.Top });

私が経験している問題は、新しいコントロールが既存のコントロールの上に追加されることです。そのため、コントロールを上から下に 1、2、3、4、5、6 の順序で並べたい場合は、6、5、4 のように並べます。 、3、2、1、上から下へ。

既存のすべてのコントロールの後に (表示順序に関して) 新しいコントロールが追加されるようにする方法を知りたいです。

また、選択した他の 2 つのコントロールの間にコントロールを挿入できるかどうかを知りたい

TabIndex を設定しようとしましたが、役に立ちませんでした!

4

4 に答える 4

3

Winforms を使用する場合、コントロールが追加される順序のみがドッキング動作を決定します。

最後に追加されたコントロールは、常にドッキング ボーダーに最も近い位置に移動しDockStyle.Topます。もタブオーダーもこれを変更しBringToFrontません。SendToBack

コントロールを逆の順序で追加するか、削除して再度追加するだけです。

于 2013-01-22T10:55:06.787 に答える
1

これが私の解決策です。基本的には、コンテナだけでなくリストにもコントロールを配置します。次に、前述のように、ほとんどすべての投稿を前面に表示します。これはもちろん、挿入の可能性も提供します。

    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();
    }
于 2013-01-22T11:03:00.783 に答える
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;
}

// ...

コントロールの挿入に関しては...コントロールの位置はフォームに追加される順序に依存するため、これは不可能です。ただし、レイアウト スペースがある場合は、2 つのコントロールの間に物理的にコントロールを挿入できます... ctrl1 と ctrl2 の位置と寸法を計算し、これに応じて新しい位置を設定します。

于 2013-01-22T10:34:29.870 に答える