在VB中实现PickList功能

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

VB中实现PickList功能


前言 使用Delphi编程的人都知道,在Delphi中数据库控件DbGrid具有PickList功能,即编辑所在列时,只要用鼠标点击时,该列所在行便会出现组合框,列出所有内容供用户选择,这很方便数据录入。如图一所示。


图一、Delphi的PickList功能展示图

很令人遗憾, VB所提供的控件Dbgrid32.ocx经作者寻找,无上述的 PickList 功能。经作者探索,在 VB中仍实现了上述的 PickList 功能思路:1、在窗体上加入组合框,个数与需实现 PickList 功能的列数完全相同。2、在相关事件中,如鼠标或光标(即焦点)定位在 PickList列,则显示组合框,其位置、大小与DBGrid的所在单元完全重合,默认下,组合框的值为DBGrid的所在单元的值;否则组合框隐藏。3、由用户在ComboBox组合框中选择或输入相关信息,并把组合框的信息放入DbGrid单元中即可。 实现过程:为简单起见,假定需实现 PickList的列只有一列,相应的数据库文件已加入相关控件中。1、新建一工程,在引用中加入Microsoft Data Bound Control(即文件Dbgrid32.ocx);并把控件放入窗体中;设想记录文件包括姓名、退休种类等等,退休种类为第二列(为Dbgrid1的第一列),实现 PickList 功能;取DbGrid1.RowHeight=300,即与组合框的宽相等,且不允许调整Dbgrid1的行大小。2、在窗体中加入ComboBox组合框,名称:Cbl退休种类;Visible:False(即隐藏);;在List属性加入信息:如离休|建国前老工人|退休|退职|伤退(注:|代表换行符)。且把Cbl退休种类放在Dbgrid1上并置前; 实现PickList功能的主要源代码如下:Option ExplicitDim LastRecNum As Integer '记录组合框内容改变时记录的位置Private Sub cbl退休种类显示_LostFocus()'更新记录值Dim CurRecNum '当前记录号With Data1.RecordsetCurRecNum = .AbsolutePosition + 1.MoveFirst.Move LastRecNum - 1.Edit.Fields(1) = frmPick.cbl退休种类显示.Update'记录位置还原.Move CurRecNum - LastRecNumEnd WithEnd Sub'关注以下三个事件Private Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)DisPlayComboBoxEnd SubPrivate Sub DBGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer)DisPlayComboBoxEnd SubPrivate Sub DBGrid1_Scroll(Cancel As Integer)Cancel = False'组合框消失DoEventsfrmPick.cbl退休种类显示.Visible = FalseEnd SubSub DisPlayComboBox()‘符合条件时对组合框等应做的操作。为过程为文章的关键所在。'当前记录所在位置LastRecNum = Data1.Recordset.AbsolutePosition + 1'frmPick.Caption = Data1.Recordset.Fields(1).ValueWith frmPick.cbl退休种类显示'当光标或鼠标位于“退休种类”列时,If DBGrid1.Col = 1 Then'组合框出现且拥有焦点;.Visible = True.SetFocusIf DBGrid1.Columns(1) = "" Then.Text = .List(0)Else.Text = DBGrid1.Columns(1)End If'cbl退休种类显示出现的位置'左:Dim RecordTitleWidth '记录头的宽度RecordTitleWidth = 280 '该值不知怎获取,本处系逐步调整;.Left = RecordTitleWidth + DBGrid1.Left + GetLeftColPosDim ColHeadHeight '列头的高度ColHeadHeight = 220 '该值仍不知怎获取,本处系逐步调整;.Top = DBGrid1.Top + DBGrid1.Row * DBGrid1.RowHeight + ColHeadHeight.Width = DBGrid1.Columns(1).WidthEnd If'当光标不在 PickList 列时If DBGrid1.Col <> 1 Then.Visible = FalseEnd IfEnd WithEnd SubFunction GetLeftColPos()'DBgrid1控件中最左边可见列距实现 PickList列的位置Dim ii = DBGrid1.LeftColGetLeftColPos = 0If i < 1 ThenDo While i < 1 '该处1的列系实现 PickList的列GetLeftColPos = GetLeftColPos + DBGrid1.Columns(i).Widthi = i + 1LoopEnd IfIf i > 1 ThenDo While i > 1 '该处1的列系实现 PickList的列GetLeftColPos = GetLeftColPos - DBGrid1.Columns(i).Widthi = i - 1LoopEnd IfEnd Function图二为用 VB代码编写的 PickList 功能的例子。


图二、用VB代码实现DBGrid的列PickList例图

以上代码在 VB6.0、Windows98中文版中通过。 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值