VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - Visual Basic中在同一界面输入大量数据的几种方法
发表评论(0)作者:石运伟 王丽梅, 平台:VB6.0+Win98, 阅读:14500, 日期:2000-10-01
Visual Basic中在同一界面输入大量数据的几种方法
(作者:石运伟 王丽梅 2000年06月06日 14:41)


1 前言

在输入数据量比较大时,用户一般要频繁地刷新界面和反复地按一些按钮,使输入效率大大降低。如果能在一个界面上实现大量不同类型数据的输入,则可以减少输入时的工作量,从而提高了输入效率,同时还可以浏览若干次输入的项目,使数据的编辑保存更加方便。

Visual Basic为编制Windows应用程序提供了一种全新的、相当简单的方式[1]。在数据输入时,一般用文本框或者组合框,录入完一条记录后保存,然后才能录入下一条记录。下面以病房中医嘱的录入为例,介绍几种在VB中可以使输入大量数据简便化的方法。医院病房医嘱的录入项目和数据较多,如果在一个界面上完成输入,可以尽量提高录入效率,尽最大可能地避免录入错误。医嘱分长期医嘱和临时医嘱两大类别,每一类又可分为用药医嘱、检查医嘱、治疗医嘱、手术医嘱等几种类型,并且每种类型中所要求的输入项目都不尽相同,一位病人某一类型的医嘱中又会有若干条内容。我们用SSTab控件来选择输入长期医嘱和临时医嘱,用两组选项按钮来选择具体的医嘱类型,用MSFlexGrid控件完成数据的录入,充分利用控件数组的Visible属性,从而减少了界面刷新次数,提高了录入速度。

2 利用选项卡控件

SSTab 控件提供了一组选项卡,每个选项卡都可作为其它控件的容器。在控件中,同一时刻只有一个选项卡是活动的,这个选项卡向用户显示它本身所包含的控件而隐藏其它选项卡中的控件。SSTab 控件就象笔记本中的分割线或一组文件夹上的标签一样。用 SSTab 控件,可以在应用程序中为某个窗口或对话框的相同区域定义多个页面,这样一来就节约了大量的空间。

在此设置SSTab1的选项卡标题为“长期医嘱”和“临时医嘱”,Tabs=2、TabsPerRow=2,这样就可以使用这个控件了。当然要把另外一些控件组织放置到不同选项卡中。 当用户选定该选项卡时就会显示该选项卡中的控件,所以要将这些控件预先绘制出来。在每个选项卡中放置一个Frame控件,里面包含一组选项按钮(Option1(0)~Option1(8)),可选择医嘱的具体类型。另外添加 MSFlexGrid控件数组(MSFlexGrid1(0)~MSFlexGrid1(8)),分别对应医嘱的具体类型,并设定固定行为1,固定列为0,根据每种医嘱所包含的字段的个数设定MSFlexGrid的列数。在载入窗体时,先把MSFlexGrid中固定行的每个字段的标题填充好。



3利用选项按钮和控件数组的Visible属性

可以在窗体中放入几个选项按钮,选择其中一个选项按钮时,出现一些输入项,当这些项目输入完以后,再选择另外一个选择项时,前面的输入项目消失,出现符合此条件下的输入项目。这样一来只利用一个窗体,就可以完成大量不同数据的输入。这主要利用了选项按钮互斥的属性,即选项按钮允许用户从一组互斥的选择中挑选一个,选择一个以后,组中的其它按钮都不能被选中。

在这儿我们把选项按钮放在Frame框内,形成一组,当选择其中一个时,其相对应的MSFlexGrid显示,用户可以进行该类项目的输入,而其它选项相对应的MSFlxGrid的Visible属性为False,从而限制了对其它项目的输入。

Private Sub Option1_Click(Index As Integer)

Dim i As Integer

  For i =0 to 8

   MSFlexGrid1(i).Visible=False

  Next i

  With MSFlexGrid1(Index)

     .Visible = True     注释:显示待输入的项目并聚焦于第一行第一列

     .Row = 1

     .Col = 0

   End With

End Sub



4利用MSFlexGrid控件进行输入

MSFlexGrid 控件可以对表格数据进行显示。在对包含在内的字符串和图片的表格可进行分类、合并以及格式化,具有相当好的灵活性,并且可与数据库控件相绑定。

虽然MSFlexGrid控件具有上述优点,但是它缺少一个基本功能:用户无法编辑单个单元。这个局限性可以用文本框控件方便地克服[2]。网格本身提供了几种属性和事件,使MSFlexGrid控件和文本框很容易合并。原理是把文本框控件指定为要编辑单元的尺寸,直接放在该单元上,用户编辑文本框就象编辑MSFlexGrid一样。我们在EnterCell和LeaveCell事件中加入以下代码,就可以很轻松地完成MSFlexGrid的编辑功能。首先设Text1.Text=””。

Private Sub MSFlexGrid1_EnterCell(Index As Integer)

With MSFlexGrid1(Index)

   If .MouseRow = 0 Then   ‘固定行不可编辑

    Text1(Index).Visible = False

    Exit Sub

   End If

   .Row = .MouseRow        ‘取要编辑的单元

   .Col = .MouseCol

   Text1(Index).Text = ""       ‘清空文本框

   Text1(Index).Visible = False

   Text1(Index).Top = .Top +.CellTop   ‘确定文本框的位置与网格单元相重合

   Text1(Index).Left = .Left + .CellLeft

   Text1(Index).Width = .CellWidth

   Text1(Index).Height =.CellHeight

   Text1(Index).Text = .Text

End With

Text1(Index).Visible = True       ‘使文本框可见并可以编辑

Text1(Index).SetFocus

End Sub



Private Sub MSFlexGrid1_LeaveCell(Index As Integer)

MSFlexGrid1(Index).Text = Text1(Index).Text

End Sub

以上代码基本上实现了编辑网格单元的功能,但要为了更实用,可以再进行一些改进。例如当双击网格单元时可编辑其中内容;输入完后按回车键,文本框自动到下一列;如果输入到最后一列时,转到下一行;还应该有自动加行和响应箭头键等功能。为了实现这些功能,可以改写MSFlexGrid1_LeaveCell事件并加上另外一些事件,如果您对此感兴趣,可与作者联系。

如果您的工具栏内没有SSTab和MSFlexGrid控件,可以在VB主菜单里选择“工程”|“部件”。然后添加“Microsoft Tabbed Dialog Control”和“Microsoft FlexGrid Control”即可。



5 结论

合理使用VB中的一些控件,如SSTab、MSFlexGrid、Option等,结合使用控件数组及控件的Visible属性,可以实现在同一界面上对大量不同类型数据的输入工作,从而提高了录入效率。



参考文献

1 京京翻译组译,Visual Basic开发人员指南,机械工业出版社,1997

2 孙义等译,Visual Basic程序设计轻松入门,机械工业出版社,1996