Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UI设计问题-控件隐藏和显示_C# - Fatal编程技术网

C# UI设计问题-控件隐藏和显示

C# UI设计问题-控件隐藏和显示,c#,C#,我的申请表中有一个Winform。表单包含许多控件 范围从单选按钮。。到文本框到按钮到复选框。 其中一个要求是,根据许可证模式的类型确定 选项应显示、隐藏、启用或禁用 例如,应用程序有两种许可模式: 1) 正常的 2) 先进的 在正常模式下,只需显示几个控件,例如仅显示3个文本框和2个按钮。 而且几乎没有复选框 在高级模式下,需要显示所有项目,并且只允许少数复选框可编辑 目前我已经直接在代码中完成了。。。 我相信在徒劳中会有更多的控制添加/删除或进入先进的模式和东西 我可以设计一个简单的方式启用

我的申请表中有一个Winform。表单包含许多控件 范围从单选按钮。。到文本框到按钮到复选框。 其中一个要求是,根据许可证模式的类型确定 选项应显示、隐藏、启用或禁用

例如,应用程序有两种许可模式: 1) 正常的 2) 先进的

在正常模式下,只需显示几个控件,例如仅显示3个文本框和2个按钮。 而且几乎没有复选框

在高级模式下,需要显示所有项目,并且只允许少数复选框可编辑

目前我已经直接在代码中完成了。。。 我相信在徒劳中会有更多的控制添加/删除或进入先进的模式和东西

我可以设计一个简单的方式启用和禁用。。。我可能会得到需要基于XML文件禁用或启用的控件列表


在设计上的任何帮助都是可观的。

我可能想添加一个扩展属性提供程序,因此您可以简单地设置一个新的伪属性,该属性显示在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,您可以创建多个用户控件,然后在需要时将它们直接动态粘贴到主窗体

这种方法非常方便-您可以轻松地在单独的控件中维护所有将来的更改。唯一的问题是在加载控件时传输数据,但也可以通过一些附加属性或方法来解决