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

本文关键字:控件 取决于 启用 窗体 Windows | 更新日期: 2023-09-27 18:03:06

是否有人知道正确的方法来获得控件上的启用/禁用取决于上下文?问题是,我有大约50个控件在我的表单和他们的状态应该取决于在一些列表中选择的项目,复选框选中和数据库上的一些数据存在与否。

相当粗略的例子是当你有一个多选择树视图和一个按钮,如"比较"。只有当您在树视图上选择的节点都是同一种类型时,才应该启用此按钮。此外,一个额外的要求是,只有在选择2个节点时才应该启用该功能。还有一点,并不是每个类都可以进行比较,所以应该选择哪些类来进行比较也是有限制的。

问题不是关于控制。Enabled = true/false。这个问题是关于通用方法的。

谢谢。

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

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

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

在WPF中,我认为有某种设计器支持。这在WinForms中是可能的,类似于本地化在表单上的工作方式,但它涉及到。

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

我不确定这对您有多大帮助,但在我的情况下,当如此多的控件需要在有限/约束条件下采取行动时,那么我的方法是:

  1. 默认禁用所有控件,只有在满足使用条件时才启用任何控件。这确保了用户获得一个视觉提示,当他们可以使用一个控件,但需要更多的工作,因为它要求我们检查什么时候条件丢失,这样的控件可以再次被禁用。

  2. 默认启用/可用所有控件,但仅在满足所需条件时才采取行动/响应用户操作

但是,正如您可能会说的,这些方法可能不能很好地泛化,并且您可能需要实现某种模式/接口来代表控件观察操作/上下文,然后在满足适当条件时打开/关闭它们。

另一个想法是:是使每个需要状态管理的控件实现AsbtractControl类,这意味着在每个子控件上定义它的特定的通知状态

在你的应用程序中实现EventManager,"钩子"从不同控件接收的事件,像AsbtractControl一样转换它们,并在StateStack上推送由用户刚刚"激活"的控件所隐含的状态。

实现DesitionalEngine解析每个动作StateStack并启用/禁用UI上的控件,并且还根据所做的决定清除/或不堆栈。因为,正如你所说,设计启用/禁用也可以基于多个控件操作。

只是给你另一个想法,因为几年前我为WinForms实现了类似的东西。

希望对你有帮助。

问候。

我有一个解决方案来克服上面提到的问题,如果我们使用对象模型,那么它将很容易维护所有控件的状态。