C# Reordering/Rendering 多层面板

C# Reordering/Rendering Multiple Layers of Panels

我正在做一个有趣的项目,试图制作一个图像编辑器,我想让用户能够创建多层面板来做一些事情。 我已经成功地实现了图层的基本添加和删除,但我有点不确定设置每个面板 "z height" 然后按特定顺序渲染图层的最佳方法。

根据我在网上找到的信息,我应该使用 Controls.setchildindex 来设置每个面板的 z 顺序。所有面板都存储在一个列表中,因此当我想渲染图层时,我可以遍历列表。

我确实考虑过使用 Windows.forms.control.canvas,但这似乎会使程序的其他部分复杂化,例如设置 'custom' 背景颜色。 有没有人对分层多个面板有任何其他想法,使用 Controls.setchildindex 的方式是最好的前进方式吗?

非常感谢。

经过反复试验,我的分层系统开始工作了。 事实证明它比我更容易,只需从 "container panel"(rootPanel) 中删除所有 canvas 层控件,然后按照特定顺序重新添加它们,然后根据该顺序将它们添加到面板面板中。 我在下面包含了简单地删除和重新添加图层的方法,我正在使用 Dictionary<String,Panel> panelList 来存储面板,我希望有人觉得我的回答有用。

 private void reOrderLayers(object sender, EventArgs e)
    {
        for (int i = 0; i < rootPanel.Controls.Count; i++)
        {
            rootPanel.Controls.RemoveAt(i);
            rootPanel.Refresh();
        }

        for (int i = 0; i < listBox.Items.Count; i++)
        {
            rootPanel.Controls.Add(panelList[listBox.Items[i].ToString()]);
            rootPanel.Refresh();
        }
    }