Office中国论坛/Access中国论坛

标题: [分享]组合框输入,以往有相似记录的自动下拉提示 [打印本页]

作者: smilingkiss    时间: 2013-12-7 13:41
标题: [分享]组合框输入,以往有相似记录的自动下拉提示
如题,实例中,在“地点”组合框中输入,如果之前的记录有相似的“地点名”,则会自动下拉提示,并且可以通过键盘上下键选择!
这个功能鄙人研究了几天,终于有了头绪,解决了操作过程的一些bug,总算差强人意的实现了相关的功能,希望对于新手可以有所启发,对于各位高人,如有方便之门指教,小弟愿闻其详,还请多加指点,谢谢!

[attach]56674[/attach]

作者: smilingkiss    时间: 2013-12-7 14:12
本帖最后由 smilingkiss 于 2013-12-10 12:58 编辑

改进:清空组合框的时候可以让组合框不再dropdown
   If tt = 0  Then
      Exit Sub
   End If
上面这段代码,改成以下:
   If tt = 0 And Combo5.SelLength <> 0 Then
      Exit Sub
   End If
作者: access学习交流    时间: 2013-12-7 15:29
谢谢分享,好示例!
作者: huanghyd    时间: 2013-12-9 16:10
smilingkiss 你好,,我下载你的库运行测试没有问题。复制你的代码到我的库里测试,提示tt变量未定义,如何改?


作者: smilingkiss    时间: 2013-12-9 16:20
huanghyd 发表于 2013-12-9 16:10
smilingkiss 你好,,我下载你的库运行测试没有问题。复制你的代码到我的库里测试,提示tt变量未定义,如何 ...

不好意思,没有做严谨,第一行定义一下tt:
dim tt as Integer
这样就可以了
作者: huanghyd    时间: 2013-12-9 16:47
谢谢。变量问题解决了。测试发现输入资料时下拉框会显示非当前输入文字的信息,没有筛选出来。请看下图,
Private Sub Dye1_Change()
Dim tt As Integer
   tt = Me.Dye1.SelStart
   If tt = 0 And Dye1.SelLength <> 0 Then
      Exit Sub
   End If
   Me.Dye1.SetFocus
   If Dye1 <> "" And tt > 0 Then
      Me.Dye1 = Left(Me.Dye1, tt)
      Me.Dye1.SelStart = tt
   End If
   Me.Dye1.RowSource = "SELECT distinct [PraDyeChem].DyeName FROM [PraDyeChem] WHERE ((([PraDyeChem].DyeName) Like '*' & '" & Me.Dye1 & "' & '*'))"
   If Me.Dye1.ListCount <> 0 Then
      Me.Dye1.Dropdown
   End If
End Sub




作者: smilingkiss    时间: 2013-12-9 20:51
huanghyd 发表于 2013-12-9 16:47
谢谢。变量问题解决了。测试发现输入资料时下拉框会显示非当前输入文字的信息,没有筛选出来。请看下图,
...

Me.Dye1.SetFocus
在这一句之前有另外一句,你给忽略掉了,呵呵,,我数据库里面好像是me.text27.setfoucus,你在自己的数据库里面,随便找一个该窗体里面的一个文本框控件吧,这样做,目的是让me.dye1的值能够即时更新以应对相应的代码操作!
作者: huanghyd    时间: 2013-12-10 09:46
增加一句后问题解决了,很好用,能快速显示需要的东西,提高输入效率。现在我的当前窗体有2个组合框控件需要运用这个功能,添加代码后测试发现第一个控件Me.Dye1可以快速显示需要的东西。第二个控件Me.Dye2却默认第一个控件显示的文字。哪里出问题?请看下图:
下面是第一个控件的代码:
Private Sub Dye1_Change()
Dim tt As Integer
   tt = Me.Dye1.SelStart
   If tt = 0 And Dye1.SelLength <> 0 Then
      Exit Sub
   End If
   Me.ParentNo.SetFocus
   Me.Dye1.SetFocus
   If Dye1 <> "" And tt > 0 Then
      Me.Dye1 = Left(Me.Dye1, tt)
      Me.Dye1.SelStart = tt
   End If
   Me.Dye1.RowSource = "SELECT distinct [PraDyeChem].DyeName FROM [PraDyeChem] WHERE ((([PraDyeChem].DyeName) Like '*' & '" & Me.Dye1 & "' & '*'))"
   If Me.Dye1.ListCount <> 0 Then
      Me.Dye1.Dropdown
   End If
End Sub

下面是第二个控件的代码:
Private Sub Dye2_Change()
Dim tt As Integer
   tt = Me.Dye2.SelStart
   If tt = 0 And Dye2.SelLength <> 0 Then
      Exit Sub
   End If
   Me.ParentNo.SetFocus
   Me.Dye2.SetFocus
   If Dye2 <> "" And tt > 0 Then
      Me.Dye2 = Left(Me.Dye1, tt)
      Me.Dye2.SelStart = tt
   End If
   Me.Dye2.RowSource = "SELECT distinct [PraDyeChem].DyeName FROM [PraDyeChem] WHERE ((([PraDyeChem].DyeName) Like '*' & '" & Me.Dye2 & "' & '*'))"
   If Me.Dye2.ListCount <> 0 Then
      Me.Dye2.Dropdown
   End If
End Sub

第一个控件Me.Dye1可以快速显示需要的东西,第二个控件Me.Dye2却默认第一个控件显示的文字。输入Nylosan B 时却显示Nylosan Y 的信息。


作者: smilingkiss    时间: 2013-12-10 10:36
huanghyd 发表于 2013-12-10 09:46
增加一句后问题解决了,很好用,能快速显示需要的东西,提高输入效率。现在我的当前窗体有2个组合框控件需 ...

      Me.Dye2 = Left(Me.Dye1, tt)

你自己看看这一句^_^

建议你复制代码到记事本,然后通过“替换”把控件名字全改过来先,然后在粘贴回去
作者: huanghyd    时间: 2013-12-10 11:07
{:soso_e106:}, 粗心了。改过来了,测试没有问题。非常感谢smilingkiss 。
作者: smilingkiss    时间: 2013-12-10 11:17
huanghyd 发表于 2013-12-10 11:07
, 粗心了。改过来了,测试没有问题。非常感谢smilingkiss 。

不客气,有空多交流!
作者: djl52102    时间: 2015-6-26 16:16
楼主辛苦了,谢谢分享
作者: cfedf    时间: 2015-6-26 16:17
感谢分享,学习一下

作者: csi中国    时间: 2015-6-26 17:12
很实用

作者: lijiejoy    时间: 2015-6-26 18:29
谢谢分享,很实用的一个功能。
作者: fjh    时间: 2015-6-29 15:55
实用,感谢分享




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3