| 
         
     
     | 
     | 
    
  
    | 
    在VB中实现PickList功能 | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
     
| 使用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属性加入信息:如离休|建国前老工人|退休|退职|伤退(注:|代表换行符)。 |   
| Dim LastRecNum As Integer '记录组合框内容改变时记录的位置 |   
| Private Sub cbl退休种类显示_LostFocus() |   
| CurRecNum = .AbsolutePosition + 1 |   
| .Fields(1) = frmPick.cbl退休种类显示 |   
| .Move CurRecNum - LastRecNum |   
| Private Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) |   
| Private Sub DBGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer) |   
| Private Sub DBGrid1_Scroll(Cancel As Integer) |   
| frmPick.cbl退休种类显示.Visible = False |   
| ‘符合条件时对组合框等应做的操作。为过程为文章的关键所在。 |   
| LastRecNum = Data1.Recordset.AbsolutePosition + 1 |   
| 'frmPick.Caption = Data1.Recordset.Fields(1).Value |   
| If DBGrid1.Columns(1) = "" Then |   
| .Text = DBGrid1.Columns(1) |   
| Dim RecordTitleWidth '记录头的宽度 |   
| RecordTitleWidth = 280 '该值不知怎获取,本处系逐步调整; |   
| .Left = RecordTitleWidth + DBGrid1.Left + GetLeftColPos |   
| ColHeadHeight = 220 '该值仍不知怎获取,本处系逐步调整; |   
| .Top = DBGrid1.Top + DBGrid1.Row * DBGrid1.RowHeight + ColHeadHeight |   
| .Width = DBGrid1.Columns(1).Width |   
| 'DBgrid1控件中最左边可见列距实现PickList列的位置 |   
| Do While i < 1 '该处1的列系实现PickList的列 |   
| GetLeftColPos = GetLeftColPos + DBGrid1.Columns(i).Width |   
| Do While i > 1 '该处1的列系实现PickList的列 |   
| GetLeftColPos = GetLeftColPos - DBGrid1.Columns(i).Width |   
| 图二为用VB代码编写的PickList 功能的例子。 |   
| 
   图二、用VB代码实现DBGrid的列PickList例图 
  |   
| 以上代码在VB6.0、Windows98中文版中通过。 |    
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |