你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
2.1 制作VB可读写表格自定义控件
 

一、表格控件

Microsoft Hierarchical FlexGrid (MSHFlexGrid)Microsoft FlexGrid (MSFlexGrid)DataGridVB本身部件库中为开发者提供的三个常用的表格控件。通过这几个控件可以对数据库中的记录进行读写操作。

MSHFlexGrid控件可以显示网格数据,在对包含字符串和图片的表格进行分类、合并以及格式化时,具有完全的灵活性;还可以绑定到一个数据控件(如ADOData)上,对数据库中的数据进行读取,但是数据只能读,不能修改。

DataGrid控件实际上是一个固定的列集合,每一列的行数都是不确定的。它的每一个单元格都可以包含文本值,但不能链接或内嵌对象。可以在代码中指定当前单元格,或者用户可以使用鼠标或箭头键在运行时改变它。通过在单元格中键入或编程的方式,单元格可以交互地编辑。单元格能够被单独地选定或按照行来选定。也就是说,可以绑定到一个数据控件上,对数据库中的数据进行读写,即数据可读可写,但是这个控件的每一列的行数都是不确定的,而且它的每一个单元格都不能链接或内嵌对象。

综上所述,这几个表格控件虽然有其优点,但又都有局限性。程序员如果需要使用具有读写功能,而又不想与数据控件进行绑定的表格控件,就要自己来编写大量的代码,既麻烦又容易出错。下面介绍一个已经写好的表格控件代码,既把这三个控件的优点结合在一起,又回避了三者的局限性,让程序员的编程更容易更方便!

二、自定义控件

按照以上步骤制作的自定义控件UCXgrid 具备原表格控见的所有功能,同时还具有新的功能如下:据grid1Rows属性设置用户表格的行数,Cols属性设置用户表格的列数;在表格上有一个文本输入区,跟随光标移动,输入的内容可以显示在相应的表格中;文本输入区跟随光标移动,还可以用键盘上的方向键来控制。

三、界面设计

VB6.0中建立一个ActiveX工程,工程名称改为“UCXgrid”,在工具箱部件中添加MSHFLXGD.ocx 文件(或者在工程的部件中添加MSHFlexGrid控件),此处也可将MSHFlexGrid换成MSFlexGrid控件,将刚添加的控件加到用户控件内,名称改为grid1。再添加一个文本控件text2,其边框设为无。

四、控件制作

1.添加新功能

在代码编辑区编写如下代码:

'用户自定义过程

'根据RowsCols属性,加载表格的行数和列数,以及行标题和列的标题

Sub grid()   

   Dim j As Integer

   With Grid1

              For j = 1 To .Cols - 1

          .TextMatrix(0, j) = "" & j

      Next j

      For j = 1 To .Rows - 1

          .TextMatrix(j, 0) = "" & j

      Next j

   End With

End Sub

'对表格内容读功能的实现

'当前活动单元更改到一个不同单元时发生,实现 Text2文本的漂浮跟踪

Private Sub Grid1_EnterCell()

        If Grid1.Row = 0 Or Grid1.Col = 0 Then Exit Sub

        With Text2

            .Text = ""

            .Visible = False

            .Top = Grid1.Top + Grid1.CellTop

            .Left = Grid1.Left + Grid1.CellLeft

            .Width = Grid1.CellWidth

            .Height = Grid1.CellHeight

            .Text = Grid1.Text

            .Visible = True

            .SetFocus

        End With

End Sub

'对表格内容写功能的实现

'当前活动单元变更到一个不同的单元之前立即发生,实现Text2文本中的值添加到单元格中

Private Sub Grid1_LeaveCell()

        Grid1.Text = Text2.Text

        Text2.Text = ""

        Text2.Visible = False

End Sub

'提高操作性的功能代码

'通过方向键来控制光标所在单元格中的位置

Private Sub Text2_Keydown(KeyCode As Integer, Shift As Integer)

   Select Case KeyCode

        Case 39     '向右

            Grid1.SetFocus

            If Grid1.Col < Grid1.Cols Then Text2.Left = Grid1.Left + Grid1.CellLeft

        Case 37     '向左

            Grid1.SetFocus

            If Grid1.Col > 1 Then Text2.Left = Grid1.Left - Grid1.CellLeft

        Case 40     '向下

            Grid1.SetFocus

            If Grid1.Row < Grid1.Rows Then Text2.Top = Grid1.Top + Grid1.CellTop

        Case 38     '向上

            Grid1.SetFocus

            If Grid1.Row <= 2 Then

                Text2.Top = Grid1.Top + Grid1.CellTop

            Else

                Text2.Top = Grid1.Top - Grid1.CellTop

            End If

    End Select

End Sub

'通过方向键来控制光标所在单元格中的位置

Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)

     Select Case KeyCode

        Case 37, 38, 39, 40

            Text2.SetFocus

     End Select

End Sub

以上代码是需要用户自己添加的内容,接下来要利用VB6的控件接口向导,将想要的属性、方法和事件添加到自定义控件中。注意必须要选定RowsCols属性和grid方法,其他的步骤根据需要去选,或者按照向导默认完成。在完成向导提示内容后,回到代码编辑区,会看到关于RowsCols的代码,其中Rows代码勿动,Cols代码修改如下:

'注意!不要删除或修改下列被注释的行!

'MappingInfo=Grid1,Grid1,-1,Cols

Public Property Get Cols() As Long

    Cols = Grid1.Cols

End Property

 

Public Property Let Cols(ByVal New_Cols As Long)

    Grid1.Cols = New_Cols

    PropertyChanged "Cols"

End Property

'Rows代码参考如下:

'注意!不要删除或修改下列被注释的行!

'MappingInfo=Grid1,Grid1,-1,Rows

Public Property Get Rows() As Long

    Rows = Grid1.Rows

End Property

 

Public Property Let Rows(ByVal New_Rows As Long)

    Grid1.Rows() = New_Rows

    PropertyChanged "Rows"

End Property

五、文件保存及编译

将以上文件保存,然后通过文件菜单中的编译菜单项编译成UCXgrid.ocx文件,保存到文件加中。在文本框中输入表格的行数和列数,表格自动添加行列;当用户用鼠标点击表格中的任意单元格时,text2文本框会随着鼠标移动,并能把添加在text2中的内容添加在当前单元格中,这样就可以通过改写表格中的数据,来更新数据库相应记录中的数据了。

六、UCXgrid控件的加载和测试

1.文件加载

建立标准EXE工程,在工具箱的部件中通过浏览按钮,找到UCXgrid.ocx文件,添加到部件库,然后选中它,加载到本工程中。这时就可以像使用标准控件一样,使用自定义控件了。

2UCXgrid控件使用

UCXgrid控件添加到窗体form1中,可以在设计时,更改RowsCols属性值,也可以在运行时写代码赋值。然后在form1load事件中调用UCXgrid控件的grid方法。

如添加后的UCXgrid控件名称为UCXgrid1,将其设置成85列,其使用的代码如下:

private sub form_load()

with UCXgrid1

    . Rows=8

    . Cols=5

    . grid

end with

end sub

3.运行功能

将文件保存,运行后,表格自动被设成85列,同时具有标题行和列行,并且在表格单元内始终有文本框跟踪光标,可读取表格单元内的数据,也可以修改其内容,表格单元的光标移动,可以用方向键来控制。

七、结语

根据用户的要求制作自己的ActiveX控件,对用户来讲既方便又灵活,编译后的文件可以多次使用,提高了代码的重用性,减少了代码的出错机率。总之,这个自定义控件既具备了MSHFlexGridMSFlexGridDataGrid三者的优点,又回避了其缺点,同时还增强了其功能,提高了操作的灵活性。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089