设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4894|回复: 15
打印 上一主题 下一主题

[其它] [分享]组合框输入,以往有相似记录的自动下拉提示

[复制链接]
跳转到指定楼层
1#
发表于 2013-12-7 13:41:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,实例中,在“地点”组合框中输入,如果之前的记录有相似的“地点名”,则会自动下拉提示,并且可以通过键盘上下键选择!
这个功能鄙人研究了几天,终于有了头绪,解决了操作过程的一些bug,总算差强人意的实现了相关的功能,希望对于新手可以有所启发,对于各位高人,如有方便之门指教,小弟愿闻其详,还请多加指点,谢谢!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2013-12-7 14:12:27 | 只看该作者
本帖最后由 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
3#
发表于 2013-12-7 15:29:24 | 只看该作者
谢谢分享,好示例!
4#
发表于 2013-12-9 16:10:08 | 只看该作者
smilingkiss 你好,,我下载你的库运行测试没有问题。复制你的代码到我的库里测试,提示tt变量未定义,如何改?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

不好意思,没有做严谨,第一行定义一下tt:
dim tt as Integer
这样就可以了
6#
发表于 2013-12-9 16:47:55 | 只看该作者
谢谢。变量问题解决了。测试发现输入资料时下拉框会显示非当前输入文字的信息,没有筛选出来。请看下图,
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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

Me.Dye1.SetFocus
在这一句之前有另外一句,你给忽略掉了,呵呵,,我数据库里面好像是me.text27.setfoucus,你在自己的数据库里面,随便找一个该窗体里面的一个文本框控件吧,这样做,目的是让me.dye1的值能够即时更新以应对相应的代码操作!
8#
发表于 2013-12-10 09:46:56 | 只看该作者
增加一句后问题解决了,很好用,能快速显示需要的东西,提高输入效率。现在我的当前窗体有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 的信息。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

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

你自己看看这一句^_^

建议你复制代码到记事本,然后通过“替换”把控件名字全改过来先,然后在粘贴回去
10#
发表于 2013-12-10 11:07:03 | 只看该作者
{:soso_e106:}, 粗心了。改过来了,测试没有问题。非常感谢smilingkiss 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 06:23 , Processed in 0.111857 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表