在VB中实现PickList功能

原创 2001年06月05日 11:53:00

在VB中实现PickList功能


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

01_6_1_2a.gif
图一、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 Explicit
Dim LastRecNum As Integer '记录组合框内容改变时记录的位置
Private Sub cbl退休种类显示_LostFocus()
'更新记录值
Dim CurRecNum '当前记录号
With Data1.Recordset
CurRecNum = .AbsolutePosition + 1
.MoveFirst
.Move LastRecNum - 1
.Edit
.Fields(1) = frmPick.cbl退休种类显示
.Update
'记录位置还原
.Move CurRecNum - LastRecNum
End With
End Sub
'关注以下三个事件
Private Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
DisPlayComboBox
End Sub
Private Sub DBGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer)
DisPlayComboBox
End Sub
Private Sub DBGrid1_Scroll(Cancel As Integer)
Cancel = False
'组合框消失
DoEvents
frmPick.cbl退休种类显示.Visible = False
End Sub
Sub DisPlayComboBox()
‘符合条件时对组合框等应做的操作。为过程为文章的关键所在。
'当前记录所在位置
LastRecNum = Data1.Recordset.AbsolutePosition + 1
'frmPick.Caption = Data1.Recordset.Fields(1).Value
With frmPick.cbl退休种类显示
'当光标或鼠标位于“退休种类”列时,
If DBGrid1.Col = 1 Then
'组合框出现且拥有焦点;
.Visible = True
.SetFocus
If DBGrid1.Columns(1) = "" Then
.Text = .List(0)
Else
.Text = DBGrid1.Columns(1)
End If
'cbl退休种类显示出现的位置
'左:
Dim RecordTitleWidth '记录头的宽度
RecordTitleWidth = 280 '该值不知怎获取,本处系逐步调整;
.Left = RecordTitleWidth + DBGrid1.Left + GetLeftColPos
Dim ColHeadHeight '列头的高度
ColHeadHeight = 220 '该值仍不知怎获取,本处系逐步调整;
.Top = DBGrid1.Top + DBGrid1.Row * DBGrid1.RowHeight + ColHeadHeight
.Width = DBGrid1.Columns(1).Width
End If
'当光标不在PickList 列时
If DBGrid1.Col <> 1 Then
.Visible = False
End If
End With
End Sub
Function GetLeftColPos()
'DBgrid1控件中最左边可见列距实现PickList列的位置
Dim i
i = DBGrid1.LeftCol
GetLeftColPos = 0
If i < 1 Then
Do While i < 1 '该处1的列系实现PickList的列
GetLeftColPos = GetLeftColPos + DBGrid1.Columns(i).Width
i = i + 1
Loop
End If
If i > 1 Then
Do While i > 1 '该处1的列系实现PickList的列
GetLeftColPos = GetLeftColPos - DBGrid1.Columns(i).Width
i = i - 1
Loop
End If
End Function
图二为用VB代码编写的PickList 功能的例子。

01_6_1_2b.gif
图二、用VB代码实现DBGrid的列PickList例图

以上代码在VB6.0、Windows98中文版中通过。

在VB中实现PickList功能

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:28
  • 182

在VB中实现PickList功能

在VB中实现PickList功能前言使用Delphi编程的人都知道,在Delphi中数据库控件DbGrid具有PickList功能,即编辑所在列时,只要用鼠标点击时,该列所在行便会出现组合框,列出所有...
  • itkbase
  • itkbase
  • 2008年01月03日 13:27
  • 209

自定义jQuery PickList插件 - 用法与实例(2)

上篇文章(http://blog.csdn.net/gengv/archive/2010/04/22/5514813.aspx)中演示了最简单的一个例子,只用了三四行代码就能实现一个PickList控...
  • gengv
  • gengv
  • 2010年04月27日 10:27
  • 2759

转代码片段:MS CRM2011 获取某个实体的某个Picklist属性的所有值

string entityType = "crm_channel"; string attributeName = "crm_channel_type"; RetrieveAttributeReq...
  • zhang7583859
  • zhang7583859
  • 2014年12月03日 17:04
  • 715

rich:pickList标签的使用

使用标签之前要引入:xmlns:rich="http://richfaces.org/rich"       xmlns:ui="http://java.sun.com/jsf/face...
  • AugustTrace
  • AugustTrace
  • 2015年07月01日 13:36
  • 581

自动完成功能vb实现

自动完成功能,vb实现最近应某人要求,希望能用vb6实现自定义数据的自动完成功能,看了下相关文章,摸索了下,算是完成了.首先需要引用两个库,http://www.mvps.org/emorcillo/...
  • lingll
  • lingll
  • 2006年05月10日 22:07
  • 3211

VB在程序中调用Web实现打印

1、在窗口中放置打印按钮,打印预览,WebBrowser控件  2、在窗口Load中加入以下代码,初始化WebBrowser控件 Private Sub Form_Load() WebBrowser1...
  • cncco
  • cncco
  • 2006年04月27日 16:51
  • 1046

使用jQuery制作自定义PickList插件

现在在网上到处都可以找到各种丰富多彩的jQuery插件。之前给公司做的项目里就用到了不少,比如jqModal等。虽然第三方插件帮我实现了很多功能,但仍然喜欢使用jQueryUI里面的插件,总觉得这些插...
  • gengv
  • gengv
  • 2010年04月20日 22:25
  • 2244

VB实现右键扩展菜单以及按钮触发扩展菜单功能

开发全自动液体工作站的过程,需要用到点击扩展菜单功能,经过摸索终于实现了一个Demo,现分享出来。 1、扩展菜单大致原理:利用PopUpMenu功能,事先做好扩展菜单以及子菜单,设置为隐藏属性,通过...
  • huanzx
  • huanzx
  • 2017年09月29日 18:51
  • 190

picklist 插件

先看效果: 代码如下: Index --%> --%> --> --> --%> --%> $(functi...
  • shen19920619
  • shen19920619
  • 2017年03月15日 17:23
  • 153
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VB中实现PickList功能
举报原因:
原因补充:

(最多只允许输入30个字)