当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
在VB中实现PickList功能
发布时间:2010/5/10 10:59:16 来源:城市学习网 编辑:ziteng
  思路:
  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()
  ‘符合条件时对组合框等应做的操作。为过程为文章的关键所在。 [NextPage]   '当前记录所在位置
  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
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved