【问题标题】:Visual C#/WinForms PanelsVisual C#/WinForms 面板
【发布时间】:2011-09-10 13:37:29
【问题描述】:

我正在尝试重叠面板,以便每当我单击按钮时,都会看到某个面板。

但是做这项工作非常棘手,因为面板不重叠。

例如。我有面板 1 和面板 2:

我使面板 2 与面板 1 相同, 每当我将它们放在同一位置时... 有时,面板 2 成为面板 1 的成员,每当我将面板 1 的可见性设置为真面板 2 时也会显示。

我想要的是两个面板相互重叠。

“顺便说一句,我正在制作一个垂直标签,这就是为什么我认为隐藏、取消隐藏面板可能是我最好的方法。

是否可以让面板相互重叠?

【问题讨论】:

    标签: c# visual-studio-2010 panel


    【解决方案1】:

    设计师正在与你争吵,你确实让它们重叠。您需要使用一个小技巧来阻止底部面板吸起重叠的面板。将其重叠面板稍微靠近左上角,以便它们真正重叠。然后通过向表单构造函数添加代码将其放在正确的位置:

        public Form1() {
            InitializeComponent();
            panel2.Location = panel1.Location;
            panel2.Size = panel1.Size;  // optional
        }
    

    另一种方法是使用 View + Other Windows + Document Layout。您可以将内部面板拖放到外部容器(表单)。但是,您必须手动编辑 Location 属性。

    【讨论】:

    • +1:当我不想麻烦为实例提供不同的UserControl 选项时,我总是将一个面板隐藏在另一个面板后面反而。如果有一种对设计师友好的方式来重叠面板,那就太好了……有点像隐藏的标签。
    • @IAbstract - 检查这个:stackoverflow.com/questions/2340566/…
    【解决方案2】:

    绝对有可能有重叠的面板。

    您面临的问题是 GUI 编辑器将您的面板视为容器(这是真的),只要您在面板中放置某些内容(包括其他面板),它就会“嵌套”在此容器中。

    为了避免这种行为,首先放置一个面板并适当地定位/调整它的大小。然后右键单击它并选择“锁定控件”。这将锁定所有当前的表单控件,并且您将能够将新控件(包括面板)直接放在它们之上,而不必担心某些内容会嵌套或以某种方式放置在现有容器中。

    当然,您的控件可以重叠——只考虑顺序或控件创建,这也将定义它们在表单中的 z 顺序——稍后添加并稍后绘制控件,因此位于添加的控件之上早一点。

    编辑:不幸的是,我的回答并不完全正确。锁定面板并不能阻止它们完全吸收其中的控件位置。但是在部分重叠的情况下,两个容器都是在相同的深度级别上创建的,因此在重叠面板的情况下不存在问题,正如问题中所问的那样。

    【讨论】:

    • 如果 Lock Controls 能这样工作就好了。实际上并没有,锁定的面板仍然会吸收重叠的面板。试试看。
    • 谢谢!!!我知道这就是锁定控件的作用... :))) 顺便说一句,如何将正确答案标记为正确?
    • @Hand Passant:嗯...我在发布答案之前检查了它,但现在我发现有时它不起作用。在任何情况下,只有当面板完全位于现有容器内时,面板才会被吸起,重叠仍然是可能的。但我会更正我的答案
    【解决方案3】:

    面板有一个名为 Location 的属性,您可以根据需要对其进行修改。只要您设法放置 Panel 以便为其提供正确的父级,您就可以稍后通过更改 Location 属性来更改位置。真的没有必要将设计代码放入构造函数或类似的东西中。

    要将面板放置在正确的父级中,只需选择父级并双击工具栏中的面板控件,而不是手动将其拖到表单中。真的没有必要在这个问题上与设计师抗争。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2012-05-25
      • 2021-11-26
      • 2011-08-14
      • 1970-01-01
      • 2018-01-10
      • 2011-02-02
      相关资源
      最近更新 更多