【问题标题】:C# Reordering/Rendering Multiple Layers of PanelsC# 重新排序/渲染多层面板
【发布时间】:2017-04-29 14:56:27
【问题描述】:

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

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

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

非常感谢。

【问题讨论】:

    标签: c# controls layer


    【解决方案1】:

    所以经过一些试验和错误后,我的分层系统开始工作。 事实证明它比我更容易,只需从“容器面板”(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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-31
      • 2012-03-27
      • 1970-01-01
      • 2019-05-29
      • 2019-11-19
      • 1970-01-01
      • 2013-05-29
      • 2012-06-06
      相关资源
      最近更新 更多