Office中国论坛/Access中国论坛

标题: 组合框下拉列表宽度自动适应字段宽度问题,高手呢? [打印本页]

作者: xryacc2    时间: 2009-12-21 16:41
标题: 组合框下拉列表宽度自动适应字段宽度问题,高手呢?
本帖最后由 xryacc2 于 2009-12-21 19:29 编辑

有一个组合框“cobkmbh”、一个文本框“科目名称”、一个文本框“子科目名”,设定kmbh列数为3,绑定1列,也指定了“行”的数据来源:select kjkm.科目编号, kjkm.科目名称, kjkm.子科目名 from kjkm ordey by kjkm.科目编号,因为子科目名或用户设置字体大小的不同,我需要下拉列表框宽度分别“自动”适应一个组合框,两个文本框的宽度,而不是在设计窗口设计静止的数字,我采用了如下代码:
在组合框控件kmbh获得焦点时:(注意是在子资料表的数据表窗口)
Me.cobkmbh.ColumnCount = 3
Me.cobkmbh.ColumnWidths = "" & Me.cobkmbh.ColumnWidth & ";" & Me.科目名称.ColumnWidth & ";" & Me.子科目名.ColumnWidth & ""
Me.cobkmbh.ListWidth = (Me.cobkmbh.ColumnWidth) + (Me.科目名称.ColumnWidth) + (Me.子科目名.ColumnWidth)
问题是,有时这个功能作用正常,用户随意调节字段宽度,再重新获得焦点,下拉列表框的宽度和组合框、文本框(表现为字段)的宽度自动适应,多数情况下是正常的,但有时又不行,感觉不稳定,不知是什么原因?请高手完善!谢谢。
作者: yiki    时间: 2009-12-22 09:07
曲线救国的方法:
加入更新后事件,代码如下:

Private Sub cobkmbh_AfterUpdate()
   DoCmd.GoToControl "科目名称"
End Sub
作者: xryacc2    时间: 2009-12-22 14:37
请问yiki,既然要救国,国难在哪里呀?就知道有时不稳定,有时甚至打不开窗体,但大多数时候又是正常的,请问你这句代码的救国方法原理是什么呢?
我的代码试过后,发现 Me.cobkmbh.ColumnWidths = "" & Me.cobkmbh.ColumnWidth & ";" & Me.科目名称.ColumnWidth & ";" & Me.子科目名.ColumnWidth & ""这句好像有些问题,如果给它加上厘米或cm单位又更加错误,不知什么原因,另外还有更好的让下拉列表宽度自动适应字段宽度的方法吗?谢谢!
作者: topses    时间: 2009-12-22 15:07
GotFocus事件没有引发与你程序调整是相关的,你要看看GotFocus事件的帮助说明
作者: xryacc2    时间: 2009-12-22 15:48
不是没有引发,也不是引发了事件后无效,而是引发了后出错。你可以试试拉宽或缩窄任意字段宽度后,把焦点移到“科目名称”或“子科目名”字段后,再回cobkmbh后引发GotFocus 事件。
现在试来试去又都正常,当初我是在增加“子科目名”这个控件重新回设计窗口,加了代码后又回窗体视图后发现出问题的,当时即使全部还原代码、控件和属性后也不行。就又改了几次不行后,又复原,却又行了,我仔细检查过,确实是同样的代码有时行,有时又不行,现在很怀疑是ColumnWidths的表述有问题,试的过程中,略过此代码不出错,但无效,这样的代码我没有参考任何人的,也没看到任何这样的写法,是我自已想着这样写的,所以就不知这代码是否有逻辑错误?
作者: topses    时间: 2009-12-22 15:52
老弟,我已经将你的代码更改了,难道你没有看?
MouseDown事件
作者: xryacc2    时间: 2009-12-22 16:13
本帖最后由 xryacc2 于 2009-12-22 16:16 编辑

老哥,早就发现了啊,我是说,不是有没有引发事件的问题,也不是说引发事件有没有效的问题,而是引发事件出错的问题,因为子表中的cobkmbh控件Tab顺序为第一的,当我设计完返回到窗体视图后,它第一个获得焦点,但就是它获得焦点时出错,而不是无效,出错导致返回不到它的窗体视图,当我把怀疑有问题的那句代码前加个逗号后,才能由设计视窗返回到窗体视图。但显然自动适应宽度的功能也无效了。
注意:我上传的例子的功能是正常的。拉宽或缩窄任了字段的宽度后,把焦点移到其他控件,再回到cobkmbh控件,就会发现它是自动适应字段宽度的。
我的意思是功能不稳定,发现有时它会出错,估计你把我的代码还原,你也很难再碰到它不稳定的了。
作者: topses    时间: 2009-12-23 21:28
GotFocus事件没有引发与你程序调整是相关的,你要看看GotFocus事件的帮助说明
topses 发表于 2009-12-22 15:07


这里我的隐含意思是,要你看控件的事件获得焦点前后引发的各事件顺序(不仅指GotFocus),指明你在这里使用GotFocus不是最佳的,应该是用MouseDown事件为好。这是结合你的表述和代码中给出的建议

你的一楼表述如下:
问题是,有时这个功能作用正常,用户随意调节字段宽度,再重新获得焦点,下拉列表框的宽度和组合框、文本框(表现为字段)的宽度自动适应,多数情况下是正常的,但有时又不行,感觉不稳定,不知是什么原因?



老哥,早就发现了啊,我是说,不是有没有引发事件的问题,也不是说引发事件有没有效的问题,而是引发事件出错的问题,因为子表中的cobkmbh控件Tab顺序为第一的,当我设计完返回到窗体视图后,它第一个获得焦点,但就 ...
xryacc2 发表于 2009-12-22 16:13



如果用你之前的代码的确有此问题,这个不应该叫出错;如果出错,建议你应该贴出错误号及错误描述或其图片,甚至包括使用ACCESS版本,以及操作系统,以使大家能明白你真正的问题所在,以解决问题




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