我正在开发一个尝试制作图像编辑器的有趣项目,我希望用户能够创建多层面板来完成工作。 我已成功实现了图层的基本添加和删除,但我不确定将每个面板设置为“z height”然后按特定顺序渲染图层的最佳方法。
根据我在网上发现的内容,我应该使用Controls.setchildindex
来设置每个面板的z顺序。所有面板都存储在一个列表中,所以当我想渲染图层时,我可以遍历列表。
我确实研究过使用Windows.forms.control.canvas
,但这会使程序的其他部分变得复杂,例如设置“自定义”背景颜色。
有没有人有关于分层多个面板的任何其他想法,是使用Controls.setchildindex
最佳前进方式的方式吗?
非常感谢。
答案 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();
}
}