【问题标题】:How to stop overlapping panels to become children of each other?如何停止重叠面板成为彼此的孩子?
【发布时间】:2017-12-03 12:32:29
【问题描述】:

场景 我有 3 个面板,根据组合框的选择显示。 每个面板都设计在精确的位置,所有三个都完全相互重叠,甚至可能部分重叠。但是它们的 Top 和 Left 属性是相同的。

问题 一旦我拖动以定位面板,它就会成为其他两个面板之一的孩子。 我已经通过 .parent.name 检查了它 如果我隐藏一个面板说 pnlRSB1 那么它的孩子 pnlRSB2 也会消失。

虽然我已经使用递归循环解决了这个问题,但我想知道其他可用的选项。

有没有办法告诉 IDE,“嘿,不要让它成为底层面板的子面板,它是独立的”?

顺便说一句,如果有人想要循环解决方案,我也会提供,但我讨厌递归,尽管我现在正在使用它。

【问题讨论】:

    标签: vb.net panel overlap


    【解决方案1】:

    解决方案是不要拖动它们。只需将所有三个Panels 添加到表单的某处即可。拖动其中一个,使其成为您想要的 LocationSize,然后通过“属性”窗口将另外两个设置为具有相同的值。

    顺便说一句,如果您将Panel 放在另一个人的范围内,它只会成为另一个人的孩子。拖放时,父级将是鼠标指针下的任何控件。

    还请注意,您仍然可以轻松访问设计器中的每个Panel,即使它们位于相同的Location 中并且具有相同的Size。您只需更改 z 顺序,以便您要访问的位于前面。有很多方法可以做到这一点。

    1. 右键单击您可以看到的Panel,然后选择Send to Back。重复直到您要访问的Panel 出现在前面。
    2. 打开“属性”窗口并在顶部的下拉列表中选择您要访问的Panel。即使Panel 本身被遮挡,这也会在Panel 周围绘制一个选择矩形。右键单击选择矩形并选择Bring to Front
    3. 打开“文档大纲”窗口,将您要访问的Panel 拖到树中其他人的上方,或者选择它并使用工具栏将其向上移动。树中子控件的顺序与 z 顺序相匹配。

    【讨论】:

    • 非常感谢它解决了这个问题。我从属性下拉列表中选择所需的面板。还有一个,是否有可能像 panel(cboMethod.selectedIndex).Show() 一样控制 Array :)
    • 对控件数组的设计器支持在 VB.NET 中不存在,因为它在 VB6 中不存在,因为它不是必需的。在 VB6 中使用它的原因是使用单一方法处理多个控件的事件。这是通过将多个控件添加到 VB.NET 中的单个 Handles 子句来完成的,这可以通过“属性”窗口或在代码中手动完成。控件数组与 VB.NET 中的任何其他数组一样,因此它像任何其他数组一样在代码中创建。
    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多