【问题标题】:TreeView detail architecture questionTreeView 详细架构问题
【发布时间】:2011-05-18 23:53:27
【问题描述】:

我正在开发 Windows 窗体应用程序,我的客户希望左侧有一个带有节点的 TreeView,当单击该节点时,他们的用户可以在右侧的详细屏幕中工作。最简单的方法是创建在单击相应节点之前禁用的面板。然而,这个应用程序正在增长,并且有太多的应用程序存在于主窗体中。

我想知道是否可以为每个节点创建一个表单,该表单将打开并扩展到右侧的详细信息区域,然后在我完成后关闭。这样我就没有一个单一的整体形式,但是我不确定如何去做。

有人知道如何做这样的事情吗?

谢谢。

【问题讨论】:

    标签: c# winforms architecture treeview master-detail


    【解决方案1】:

    您应该尝试使用UserControls。

    基本上,每个UserControl 都是一个表单(或多或少),您可以像添加任何其他控件一样将其添加到主表单中。

    【讨论】:

    • 感谢您的建议。一开始我考虑过用户控件,但后来避开了它们,因为我似乎必须编写大量代码来公开数据、事件和方法。但是,实际表单与自身之外的组件几乎没有交互。所以现在这似乎是一个很好的方法。一个问题,你如何管理尺寸?你会把用户控件放在一个面板中,然后在父容器中设置为 doc 吗?
    • 我正在处理的应用程序有类似的设置。我有一个拆分容器,左侧有树视图,然后在右侧,我添加或删除了用户控件。我总是停靠它以填充并在用户控件中设置控件的锚点
    • 锚是什么意思?能发个sn-p吗?谢谢。
    • 控件都有一个 Anchor 属性,您可以设置该属性以使控件扩展到窗体的大小,与父容器的侧面保持相同的距离
    【解决方案2】:

    我将为每个页面从 Panel 继承,将每个 Panel 派生对象的实例附加到每个 TreeView 节点的 Tag 属性,并在选择节点时显示(Dock=Fill)。

    【讨论】:

    • 感谢您的回答,但是,我需要远离面板,因为面板的所有代码都在一种形式中,我不希望在一种形式中使用那么多代码。大部分应用程序将通过单击 TreeView 中的元素来驱动,该元素将在右侧的详细信息区域中显示 UI。我需要将这些 UI 分解为不同形式的容器。
    • 再次阅读我的答案 - 您需要创建从 Panel 继承的类,并在表单中使用这些类。
    • 感谢您抽出宝贵时间回复我的评论。
    【解决方案3】:

    您可以使用拆分控件并在右侧加载表单,但需要正确排列。正如@codethis 提到的,用户控件最好足以处理这些,因为它们的代码是单独编写的。只需要传递参数(来自节点选择)。

    您可能需要多个用户控件,并根据您的屏幕变化将它们放置在您的表单中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多