C# UI设计问题-控件隐藏和显示
我的申请表中有一个Winform。表单包含许多控件 范围从单选按钮。。到文本框到按钮到复选框。 其中一个要求是,根据许可证模式的类型确定 选项应显示、隐藏、启用或禁用 例如,应用程序有两种许可模式: 1) 正常的 2) 先进的 在正常模式下,只需显示几个控件,例如仅显示3个文本框和2个按钮。 而且几乎没有复选框 在高级模式下,需要显示所有项目,并且只允许少数复选框可编辑 目前我已经直接在代码中完成了。。。 我相信在徒劳中会有更多的控制添加/删除或进入先进的模式和东西 我可以设计一个简单的方式启用和禁用。。。我可能会得到需要基于XML文件禁用或启用的控件列表C# UI设计问题-控件隐藏和显示,c#,C#,我的申请表中有一个Winform。表单包含许多控件 范围从单选按钮。。到文本框到按钮到复选框。 其中一个要求是,根据许可证模式的类型确定 选项应显示、隐藏、启用或禁用 例如,应用程序有两种许可模式: 1) 正常的 2) 先进的 在正常模式下,只需显示几个控件,例如仅显示3个文本框和2个按钮。 而且几乎没有复选框 在高级模式下,需要显示所有项目,并且只允许少数复选框可编辑 目前我已经直接在代码中完成了。。。 我相信在徒劳中会有更多的控制添加/删除或进入先进的模式和东西 我可以设计一个简单的方式启用
在设计上的任何帮助都是可观的。我可能想添加一个扩展属性提供程序,因此您可以简单地设置一个新的伪属性,该属性显示在IDE属性面板中 类似的示例(使用“主体”进行基于角色的检查)
但是,请注意,对于有编程知识的人来说,绕过任何简单的操作都是非常容易的。我可能想添加一个扩展属性提供程序,这样您就可以简单地设置一个出现在IDE属性面板中的新伪属性 类似的示例(使用“主体”进行基于角色的检查) 然而,请注意,对于有编程知识的人来说,绕过任何简单的东西都是非常容易的。我会使用两个块(比如组或其他东西),一个用于普通,一个用于高级,这样你只能隐藏整个块。 比如:
+ Normal options ----------------------------+
| ( ) check this to .. |
| Name: [ ] |
+--------------------------------------------+
+ Advanced options --------------------------+
| IP: [ ] |
| Host: [ ] |
| Mode: ( ) ... |
| ( ) ... |
+--------------------------------------------+
我会使用两个块(比如组或其他东西),一个用于普通,一个用于高级,这样你只能隐藏整个块。
比如:
+ Normal options ----------------------------+
| ( ) check this to .. |
| Name: [ ] |
+--------------------------------------------+
+ Advanced options --------------------------+
| IP: [ ] |
| Host: [ ] |
| Mode: ( ) ... |
| ( ) ... |
+--------------------------------------------+
如果您正在为UI使用控制器,“显示/隐藏”逻辑应该保留在控制器中(这是一条业务规则)。 我在控制器中使用“CanCurrentUserSeeEditButton”等属性来确定控件是否应可见,然后在UI中使用数据绑定将控件设置为“可见”或“已启用”属性以绑定到控制器逻辑(INotifyPropertyChanged针对所有控制器属性实现) 这意味着我可以在没有UI的情况下对启用/可见逻辑进行单元测试
这无助于自动添加新控件,但可以更轻松地跟踪每个新控件所需的内容。如果用户界面使用控制器,“显示/隐藏”逻辑应保留在控制器中(这是一项业务规则)。 我在控制器中使用“CanCurrentUserSeeEditButton”等属性来确定控件是否应可见,然后在UI中使用数据绑定将控件设置为“可见”或“已启用”属性以绑定到控制器逻辑(INotifyPropertyChanged针对所有控制器属性实现) 这意味着我可以在没有UI的情况下对启用/可见逻辑进行单元测试
这无助于自动添加新控件,但可以更轻松地跟踪每个新控件所需的内容。我不确定这是否是一种好的做法,但如果模式的数量不是很大,如3或4,您可以创建多个用户控件,然后在需要时将它们直接动态粘贴到主窗体
这种方法非常方便-您可以轻松地在单独的控件中维护所有将来的更改。唯一的问题是在加载控件时传输数据,但也可以通过一些附加属性或方法来解决。我不确定这是否是一种好的做法,但如果模式的数量不是很大,如3或4,您可以创建多个用户控件,然后在需要时将它们直接动态粘贴到主窗体 这种方法非常方便-您可以轻松地在单独的控件中维护所有将来的更改。唯一的问题是在加载控件时传输数据,但也可以通过一些附加属性或方法来解决