在常规面板中重新排序控件

时间:2015-10-01 13:25:38

标签: c# winforms user-controls panel

ContolPanel的类型为:FlowLayoutPanel 发件人是我点击的面板。

如何重新排序我的FlowLayoutPanel中设置的Usercontrols的顺序?

这是我将我的Objekts(UserControls)添加到我的FlowLayoutPanel

的方法
private void button1_Click_1(object sender, EventArgs e)
    {
        int count = 0;
        var panel = sender as Panel;
        switch (panel.Name)
        {

            case "TypePanel":
                ContolPanel.Controls.Add(new Type().Initialize(_ConnectionStr, _connection, _brugerLNr, _klinikLNr, _speciale, _ICPC, _segmenterStrings).SetModifiedCallBack(FilterModified));
                break;
        }
    }    

我添加了4-5次,并且有很多不同的一次,这只是一个。 使用" +"重新排序thies的最佳方法是什么?和" - "按钮?

我想保存List<Controls>中的所有控件,然后用

之类的东西重新排序
ControlList[1] = ControlList[2]

然后将列表中的所有控件插入到FlowLayoutPanel中。 但这只是dosnt似乎适合我。有这么聪明的简单方法吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以将用户控件添加到面板,并将用户控件的Dock属性设置为DockStyle.Top,然后使用{{3}更改z-order用户控件向上或向下移动。

为此,请将这两种方法添加到用户控件中:

public void MoveUp()
{
    if (this.Parent == null)
        return;

    var index = this.Parent.Controls.GetChildIndex(this);
    if (index <= this.Parent.Controls.Count)
        this.Parent.Controls.SetChildIndex(this, index + 1);
}

public void MoveDown()
{
    if (this.Parent == null)
        return;

    var index = this.Parent.Controls.GetChildIndex(this);
    if (index > 0)
        this.Parent.Controls.SetChildIndex(this, index - 1);
}

此外,您可以通过覆盖用户控件中的ProcessCmdKey来支持使用 + 向上移动并使用 - 键向下移动:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch (keyData)
    {
        case Keys.Add:
            this.MoveUp();
            break;
        case Keys.Subtract:
            this.MoveDown();
            break;
        default:
            break;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

此外,您还可以在用户控件中向上移动Button并向下移动Button,并在用户控件中处理这些按钮的Click事件:

private void MoveUpButton_Click(object sender, EventArgs e)
{
    this.MoveUp();
}

private void MoveDownButton_Click(object sender, EventArgs e)
{
    this.MoveDown();
}

由于我们创建了MoveUpMoveDown public,您可以在表单中上下移动用户控件:

myUserControl1.MoveUp();