.NET 应用程序界面开发经验总结 设计良好的程序的表现之一就是细节做的还可以
做程序主要体现的是细节,细节方面做的好,用户会觉得你的软件比较专业。良好的架构与设计模式可以使维护方便。在用户这边,要花一些心思琢磨用户的想法。有时候用户比我们的界面设计还专业,用户有很强的行业知识,他见识过的同行业的软件比我们多。下面的这几点界面设计的体会和经验,来自于用户,在这里与大家分享。
1 如果要写数据项到注册表中,最好以加密的形式保存
虽然.NET提倡的是XCOPY,但有时还是需要写一些必要的信息到注册表中,以减少用户的配置出错的可能性。比如,自动更新功能中,需要把自动更新的网址写到注册表中。ASP.NET Web程序如果不使用默认的80端口,也推荐在安装程序时把Port写到注册表中。对于需要用户反馈的程序,一种默认方法是把用户的feedback内容发送到邮箱中,这时需要提供邮箱的注册用户名和密码,这种情况是必须要加密的。
有时候不小心看了一下自己的注册表(regedit)内容,也是惨不忍睹,大量的程序都会写数据项到注册表中。
2 界面划分的基本原则是信息分类,将同类的信息放在一起,集中显示。
这是物料主档的功能的界面,先分大类,用Tabcontrol分开,基本信息,环保指令,包装规格,计划数据,附件信息。大类里面再小的类别,用GroupBox分开,比如控制点,规格。
规格这个地方,使用了ComboBox,这个有待于商量。当选择的数据项比较多时,应当使用ComboBox,数据项比较少时,我以为用RadioButton要合适一些,这也取决于空间的大小程度。
这个图片中有两组Item Type,上面一组是ComboBox的翻版,下面一组对文字进行了简化调整。
使用ComboBox的好处是,当它的item发生变化时,界面不需要变动,而RadioButton做不到这一点,也许这是选择ComboBox的一个很好的理由。
对信息分类导向的界面设计国中,菜单项的深度也应该尽量保持在三层以内,对相同的功能进行分类。请看下图
只用了二层,相同的功能菜单里面,还可以用分割符号分开,以增加可读性。
3 界面中的名词选择尽量选择专业的词汇,避免通用的词汇。比如以前我做ERP系统控制面板,总会加上Managment这个词语,如Sales Management/Purchasing Management以表达销售管理,采购管理,Management这个词语应该去掉。在很多信息分类的TabControl中,通常第一个tab page的名字叫General或者上面例子中的Basic Information,或General Information,当系统中有多个这样的界面布局时,应该保持一致。比如上面的物料主档用了Basic Information,其它的地方,在基本信息的tab page中也应该用Basic Information。举例说明
采购收货的界面,第一个tab page使用General Information。
物料清单的界面,第一个tab page也使用了General Information。
4 界面设计时字体的选择。
以我的选择,功能界面中使用Microsoft Sans Serif, 8.25pt字体。状态栏(status)和菜单(menu)使用默认的Segoe UI, 9pt。对于功能界面,除了规定程序员在设计时使用指定的字体外,还在运行时,循环遍历一下界面中的界面控件,对不是标准字体的控件予以调整。字体统一,界面才看起来整洁,美观。
不推荐在控件中使用特殊的字体,尽管你可以在部署的时候把字体也拷贝到目标机器中。Crystal Report的报表中,需要使用一些特殊的字体,运行报表前应该检测字体是否存在。比如你可以把字体以嵌入的资源的方法嵌入到程序集中,如果目标机器的指定的字体不存在,可以从程序集的资源中释放字体到字体文件夹中。
5 对可能造成数据无法恢复的操作必须提供确认信息,提供用户放弃选择的机会。比如删除数据,退出功能时没有保存数据,耗费很长时间的MRP运算。这在开始操作前,要给用户有反悔的选择。
对于删除确认,有一种情况,就是对用户的设计予以认可,充分信任。比如用户在设计菜单界面时,要删除一条菜单,这时,不应该弹出确认删除的对话框。Visual Studio中删除一项MenuStripItem时,没有要我们确认删除。
正准备Delete菜单项中的New项,Visual Studio会认可你的操作,没有要你确认之后再删除。
因为这个理由,我在自定义的Menu Designer,Form Designer,Workflow Designer中都实行这个策略,充分信任用户的操作。