C#重新排序/渲染多层面板

时间:2017-04-29 14:56:27

标签: c# controls layer

我正在开发一个尝试制作图像编辑器的有趣项目,我希望用户能够创建多层面板来完成工作。 我已成功实现了图层的基本添加和删除,但我不确定将每个面板设置为“z height”然后按特定顺序渲染图层的最佳方法。

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

我确实研究过使用Windows.forms.control.canvas,但这会使程序的其他部分变得复杂,例如设置“自定义”背景颜色。 有没有人有关于分层多个面板的任何其他想法,是使用Controls.setchildindex最佳前进方式的方式吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

所以经过一些试验和错误后,我的分层系统正常运行。 事实证明它比我更容易,只需从“容器面板”(rootPanel)中删除所有画布层控件,然后按照特定顺序重新添加它们按照该顺序对它们进行分层。 我已经包含了下面的方法,它只是删除并重新添加图层,我使用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();
        }
    }