WinForms UI设计:仅显示当前查看的层次结构级别的控件

时间:2013-04-03 19:04:33

标签: c# winforms ui-design

我正在尝试创建一个WinForms应用程序,它允许用户显示和编辑存储在MSSQL数据库中的数据。被更改的数据是分层的,并且在层次结构的单个级别内,可以改变的属性是相同的;换句话说,层次结构的单个级别的控件是相同的,但它们可能与其他级别不同。

我正在尝试以这样的方式创建应用程序:只有一个表单,其中的控件根据用户正在查看的项目的层次级别进行更新。我意识到这可以通过将所有级别的所有控件放在一个表单上并更新它们的“Visible”属性来实现,但是这种方法使得表单的设计很难由于混乱...让你们中的任何一个发现更优雅/更少丑陋的解决方案?

1 个答案:

答案 0 :(得分:1)

如果你想在WinForms中这样做,你可以利用visibility and enabled-ness are both "heritable" traits in the Windows model这个事实。

换句话说,如果将所有控件组合在父容器(例如Panel或UserControl)中,则禁用该容器控件并使其不可见,其所有子控件也将同样禁用且不可见。 / p>

我建议为层次结构的每个级别创建UserControl。思维方式与使用单独的表单几乎相同,只是它们实际上不是单独的表单。多个UserControl对象可以显示在单个表单上,因此您可以根据需要使用多个对象。这将所有相关控件保持在一起,这使管理更加容易。您还可以在WinForms设计器中单独与这些UserControl进行交互,就像它们是单独的Forms一样,解决了“混乱”问题。

要在“活动”层次结构之间切换,请遍历所有UserControl对象。使当前“活动”的一个启用并可见(其所有子项将自动变为同样)。让其余的人残疾和隐藏(他们所有的孩子也将自动变为同样)。

但是,我不会在这里与HighCore争论。 如果您还不知道WinForms ,那么您可以轻松地花时间学习WPF。如果您决定这样做并想知道如何在该UI框架中完成相同的任务,请务必提出一个新问题。