【问题标题】:Creating Options Menu with overlapping panels使用重叠面板创建选项菜单
【发布时间】:2025-12-24 10:20:08
【问题描述】:

我正在尝试在 C# 表单项目中创建一个选项菜单,我很好奇是否有一种不那么丑陋的方法可以做到这一点。我有一个具有不同类别选项的 ListBox,当您选择一个类别时,该类别的选项会出现在右侧的面板中。基本上,与 Visual Studio 本身的选项菜单相同。

显然,不同的控件必须在这里使用相同的空间,因为每个类别都有不同的选项需要显示在表单的同一区域中。因此,当您选择一个类别时,其他所有类别的控件都必须隐藏。

我目前为每个类别使用不同的 Panel 对象(目前为 13 个),但设计每个面板是一件令人头疼的事情,因为每次我需要更改一个面板时,我都需要将其他 12 个面板拖到一边。有一个更好的方法吗?我愿意接受任何建议,无论是对实现的完全更改,还是只是用于处理 13 个面板中的 1 个的 Visual Studio 提示,这些面板全部重叠。

如果一切都失败了,我可以使用水平呈现的 TabControl,但我不喜欢它的外观。

提前致谢。

【问题讨论】:

    标签: c# .net visual-studio winforms


    【解决方案1】:

    我可以想到三种替代方法:

    1. (好的)使用不向用户显示标题的选项卡控件。
    2. (更好)为每个选项页面创建用户控件,以便为每个选项页面创建不同的设计器文件。
    3. (更好吗?)根据一些描述性信息动态生成 UI,因此根本不需要处理设计器文件。

    【讨论】:

    • 我想我会采用用户控制的想法,这似乎是我太盲目而无法想到的明显解决方案。出于好奇,您可以从默认的 TabControl 中删除标题吗?还是您的意思是自定义选项卡控件?
    • 我做WinForms开发已经有一段时间了,但我认为你可以删除标题。
    【解决方案2】:

    看看UserControl 类。您可以使用表单设计器对其进行设计,而不是在选择项目时以编程方式将其放置在 ListBox 的右侧。为您拥有的每个选项类别创建一个不同的UserControl

    【讨论】:

      【解决方案3】:

      首先您应该知道,当您处于设计模式时,属性窗口(视图->属性菜单)中有一个下拉菜单,允许您选择一个控件。因此,您无需将其他控件移开。

      其次,我会为每个类别制作它自己的用户或自定义控件的选项面板。这样您就可以单独编辑面板本身。然后,您可以选择在选择其类别时显示/隐藏该自定义控件,甚至可以动态创建控件。

      【讨论】:

      • 下拉菜单不会将所选控件带到 z 顺序的顶部。因此,如果我从下拉列表中选择一个并将一个组件拖到它上面,它会将组件放在顶部组件上,而不是选定的组件上。不过我喜欢用户控制的想法。
      最近更新 更多