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

Posted

技术标签:

【中文标题】在常规面板中重新排序控件【英文标题】:Reordering controls in a regular panel 【发布时间】:2015-10-01 13:25:38 【问题描述】:

ContolPanel 是类型:FlowLayoutPanel sender 是我点击的面板。

如何重新排序我的用户控件在 FlowLayoutPanel 中设置的顺序?

这就是我将 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 次,并且有很多不同的一次,这只是一个。 用“+”和“-”按钮重新排序的最佳方法是什么?

我没有将所有控件保存在 List<Controls> 中,然后用类似的东西重新排序

ControlList[1] = ControlList[2]

然后将列表中的所有控件插入 FlowLayoutPanel。 但这似乎对我不起作用。有没有一种简单的方法可以做到这一点?

【问题讨论】:

-你有截图吗? -如何将用户控件添加到容器面板? -您需要什么样的重新排序?最好编辑您的问题并提出更明确的问题。 这是截图prntscr.com/8mje3f 全部是丹麦语,但正如您所见,我希望能够重新排列红色框。带有一些箭头或 + 或 - 【参考方案1】:

您可以将用户控件添加到面板并将用户控件的Dock 属性设置为DockStyle.Top,然后最好使用Parent.SetChildIndex 将用户控件的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);

您还可以在用户控件中添加上移@98​​7654329@ 和下移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();

【讨论】:

以上是关于在常规面板中重新排序控件的主要内容,如果未能解决你的问题,请参考以下文章

css 在移动设备上重新排序Divi Checkerboard面板

WPF教程四;布局之DockPanel面板

可堆叠面板 Delphi 组件

WPF:确定面板是不是对用户可见

导航菜单在 Wordpress 的管理面板中不起作用

更新面板中的 2 个 asp 面板控件