Windows 窗体,启用禁用控件取决于

And*_*lov 5 .net c# winforms

有谁知道根据上下文启用/禁用表单上的控件的正确方法?问题是,我的表单上有大约 50 个控件,它们的状态应该取决于在某些列表中选择的项目、选中的复选框以及数据库中存在或不存在的某些数据。

一个相当粗略的例子是,当您有一个多选树视图和一个像“比较”这样的按钮时。仅当您在树视图上选择的节点全部属于同一类型时,才应启用此按钮。此外,一个额外的要求是,仅当您选择 2 个节点时才应启用此功能。还有一点,并不是每个类都可以进行比较,因此您应该选择什么来进行比较也存在限制。

问题不在于 Control.Enabled = true/false。问题是关于通用方法。

谢谢。

Ada*_*rth 3

在 WPF 中,有一个叫做视觉状态管理器的东西。您可以在 WinForms 中实现类似的东西。基本上你的表单可以有状态,并且控件修改应该只允许在状态中。然后你调用一个转换来改变状态。至少所有修改代码都可以存储在状态管理器调用的某个方法中。

http://windowsclient.net/wpf/wpf35/wpf-35sp1-toolkit-visual-state-manager-overview.aspx

我认为在 WPF 中存在某种设计器支持。在 WinForms 中,遵循诸如本地化在表单上的工作方式之类的内容是可能的,但它涉及到。

我为一个项目做了一个粗略的状态管理器,它获取了一系列字符串状态名称和相应的委托来调用方法,然后将所有修改代码保留在方法中而不是对表单进行修饰是一种很好的做法。