Visual Basic(以下简称VB)的出现,更加简化了Windows程序界面的设计工作,只需要极少量的代码,就能实现标准Win-dows应用程序的界面。但是,如果不了解Windows程序界面设计的原则,或者不熟悉VB下界面编程的技巧,就难以设计和实现既符合一般标准又具有特色的界面。
界面设计的原则
界面设计具有一般性的原则,最为重要的有:
1.界面要具有一致性。一致性原则在界面设计中最容易违反,同时也最容易修改和避免。例如,在菜单和联机帮助中必须使用相同的术语对话框必须具有相同的风格等。
2.常用 *** 作要有捷径。常用 *** 作的使用频度大,应该减少 *** 作序列的长度。例如,为文件的常用 *** 作如打开、存盘、另存等设置快捷键。使常用 *** 作具有捷径,不仅会提高用户的工作效率,还使得界面在功能实现上简洁和高效。
3.提供简单的错误处理。系统要有错误处理的功能。在出现错误时,系统应该能检测出错误,并且提供简单和容易理解的错误处理功能。错误出现后系统的状态不发生变化,或者系统要提供错误恢复的指导。
4.提供信息反馈。对 *** 作人员的重要 *** 作要有信息反馈。对常用 *** 作和简单 *** 作的反馈可以不作要求,但是对不常用 *** 作和至关重要的 *** 作,系统应该提供信息的反馈。
5. *** 作可逆。 *** 作应该可逆。这对于不具备专门知识的 *** 作人员相当有用。可逆的动作可以是单个的 *** 作,或者是一个相对独立的 *** 作序列。
6.设计良好的联机帮助。虽然对于熟练用户来说,联机帮助并非必不可少,但是对于大多数不熟练用户来说,联机帮助具有非常重要的作用。
菜单设计的原则和编程
菜单设计有如下的一般性原则:
按照系统的功能来组织菜单。
要选用广而浅的菜单树,而不是窄而深的菜单树。
根据菜单选项的含义进行分组并且按一定的规则排序。
菜单选项的标题要力求文学简短、含义明确,并且以关键词开始。
常用选项要设置快捷键。
结合以上的原则,菜单编程有以下几方面的技术和技巧:
菜单选项的分组
在VB中,菜单选项的分组是通过菜单栏分隔横线实现的。在菜单的一定位置增加一个Ca ption属性为"-"的菜单项,它在菜单上就表现为一条横线。在许多情况下,同一个功能菜单下又可以按照菜单选项的功能分为几组,这时就可以用分隔横线来实现菜单项的分组。
常用选项快捷键的设置
打开菜单设计窗口(Menu Design Window),应对于每个菜单选项有相应的快捷键(Short cut)列表,在该表中选择姿陆一个即可。需要注意的是,具有子菜单的菜单或者顶层菜单的快捷键不能这样定义。按照Windows的界面设计原则,顶层菜单的快捷键的形式是Alt+字母键。
对于一些常用的功能菜单项,有约定俗成的快捷键。例如,文件打开用CTRL+O,文件存盘用CRTL+S,打印用CTRL+P,等等。
为菜单选项定义好快捷键之后,菜单上该选项的后面就出现了快捷键的文字老隐表示。
菜单选项的使能与禁止、可见与隐藏
为了表示菜单选项的一些特殊功能,可能要用到菜单选项的使能与禁止、可见与隐藏属性。当因为某种原因使得某个选项所代表的功能不能被实现时,就应该禁止该选项被选中。菜单选项的使能与禁止是通过改变该选项的Enabled属性实现的。举例来说,假设菜单选项名为mnuName,则禁止该选项可以这样实现:
mnuName.Enabled=False
同理,隐藏一个选项可以用:
mnuName.Visible=False
而使一个隐藏的选项恢复可见则用
mnuName.Visible=True
菜单项的隐藏与恢侍册厅复可见常用在动态菜单的实现中。
菜单项的动态装入
菜单项的动态装入是指菜单项的个数不固定,并且能够在需要时动态地装入。最简单的例子就是文件菜单中最近打开的文件的列表。在第一次打开文件之前,该列表是空的,并且不在文件菜单中出现打开一个文件后,该列表不再是空的,并且文件菜单中出现代表被打开文件的菜单项。
在上面的例子里,就综合运用了菜单项的下标属性(Index)、标题属性(Caption)、可见属性(Visible)以及菜单项的装入方法(Load Method)。
具体的实现过程如下:
在文件菜单里增加一个菜单项,标题任意,并假设菜单项的Name属性是opened_files_ list
更改菜单项opened_files_list的可见属性,使
opened_files_list.Visible=False
更改菜单项opened_files_list的下标属性,使
opened_files_list.Index=0
在程序中控制菜单项opened_files_list的动态装入。
假设要显示打开过的第二个文件的文件名,并且该文件名存放在一个文件名数组opened _file_name里。需要注意的是,对于下标为0的菜单项,不能用Load方法。因为在程序执行时,该菜单项就已经被装入到内存里了另外,在菜单项的标题属性字符里的"&"字符具有特殊的含义,它的作用是在显示该属性字符串的同时,并不显示"&"本身,而紧跟"&"的字符在显示时具有下划线, 并且该字符成为热键。
结合上一节介绍的方法 通过Visual Basic Net的菜单设计器 按照图 和图 所示的菜单结构设计菜单 图 【MDI编程】项目的菜单结构之一 图 【MDI编程】项目的菜单结构之二 在利用菜单设计器设计完菜单后 分别在窗体中双击 新建 退出 层叠显示 横行平铺 纵向平铺 和 排肢轮列图标 菜单项 这样Visual Basic Net会在Form vb文件中分别产生这些菜单项的Click事件对应的处理代码 设定Form 的 IsMdiContainer 属性值为 True 这把Form 窗体定义为MDI窗体容器 这一步设置是后面编程的基础 当设置此属性值后 Form 的窗体也发生了改变 图 是设置此属性后的窗体模样 图 把Form 窗体设置为MDI窗体容器后的模样 选中图 中的 窗口 菜单项 并设置此菜单项的 MdiList 属性值为 True 其作用是当程序运行后 如果新建了一个MDI窗体 就会在 窗口 菜单项后 自动加入一个以新建MDI窗体名称命名的菜单项 如果新建了多个MDI窗体 则会在 窗口 菜单项后 会加入以这些MDI窗体名称命名的菜单项 当MDI窗体被关闭 那些以此MDI窗体命名的菜单项也会自动删除 具体可图 所示 把Visua Basic Net的当前窗口切换到Form vb的代码编辑窗口 并在定义Form 中组件的代码区加入下列代码 下列代码是定义一个变量 此变量用以统计程序中新建MDI窗体的数量 Private iFormCount As Integer = 用下列代码替历亮信换键贺Form vb中的MenuItem 的Click事件对应的处理代码 MenuItem 即为图 中的 新建 菜单项 下列代码的作用是在新建一个MDI窗体 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickDim frmTemp As Form = New Form ( ) 新建一个窗体frmTemp MdiParent = Me 为当前创建的窗体设置MDI父窗体frmTemp Text = MDI窗体 + iFormCount ToString ( )iFormCount = iFormCount + frmTemp Show ( ) 把此MDI窗体显示出来End Sub 用下列代码替换Form vb中的MenuItem 的Click事件对应的处理代码 MenuItem 即为图 中的 退出 菜单项 下列代码的作用是退出应用程序 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickApplication Exit ( ) 退出应用程序End Sub 用下列代码替换Form vb中的MenuItem 的Click事件对应的处理代码 MenuItem 即为图 中的 层叠显示 菜单项 下列代码的作用是层叠排列窗体中的所有MDI窗体 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout Cascade ) 层叠排列窗体中的所有MDI窗体End Sub 用下列代码替换Form vb中的MenuItem 的Click事件对应的处理代码 MenuItem 即为图 中的 水平平铺 菜单项 下列代码的作用是水平平铺窗体中的所有MDI窗体 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout TileHorizontal ) 水平平铺窗体中的所有MDI窗体End Sub 用下列代码替换Form vb中的MenuItem 的Click事件对应的处理代码 MenuItem 即为图 中的 垂直平铺 菜单项 下列代码的作用是垂直平铺窗体中的所有MDI窗体 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout TileVertical ) 垂直平铺窗体中的所有MDI窗体End Sub 用下列代码替换Form vb中的MenuItem 的Click事件对应的处理代码 MenuItem 即为图 中的 排列图标 菜单项 下列代码的作用是窗体中的所有MDI窗体排列图标 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout ArrangeIcons ) 窗体中的所有MDI窗体排列图标End Sub至此【MDI编程】项目的全部工作就完成了 图 图 和图 是程序运行后的界面 图 【MDI编程】运行界面之一 图 【MDI编程】运行界面之二图 【MDI编程】运行界面之三 此时我们注意到图 所示的 窗口 菜单中增加许多子菜单 而在程序设计时 并没有处理这些功能的代码 这是由于第十一步中设置 窗口 菜单项的 MdiList 属性值为 True 造成的 可见正确的设置组件的属性值有时的确能够代替烦杂的代码编写工作 五 总结 本文主要内容有二个 其一是介绍的在Visual Basic Net定制不规则窗体的实现方法 在Visual Basic Net中创建不规则窗体主要使用的是Region类和GraphicsPath类 GraphicsPath主要是绘制窗体的形状 Region主要是以GraphicsPath来构建窗体 结合本文的实现思路和具体方法 我想对于其他形状的窗体 在掌握GraphicsPath类提供的使用方法的前提下 加上对所要创建不规则窗体的规划设计 用Visual Basic Net实现起来应该不算很困难 本文的另外一个主要内容就是介绍在Visual Basic Net编写MDI应用程序的基本过程 技巧和注意事项 通过本文的介绍可见Visual Basic Net的MDI编程并没有什么复杂的地方 只需了解一些对MDI窗体处理的方法及其调用方式 当然更重要的是要了解并掌握某些组件的针对MDI的属性及其设置方式 lishixinzhi/Article/program/net/201311/11698
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)