分享
 
 
 

在VB中实现PickList功能

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在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 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 功能的例子。

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有