Office中国论坛/Access中国论坛

标题: Access能排序的列表框-Access经典源码剖析21讲 [打印本页]

作者: admin    时间: 2015-1-28 13:42
标题: Access能排序的列表框-Access经典源码剖析21讲
上一个单元我们花了4节课的时间来讲解《Access多层架构开发思路》,大家对这个开发中大型管理系统都有了一定的了解和认识,知道怎么去处理access数据库多层架构的问题
今天Access经典源码剖析内容为 能排序的列表框的实现。内容重要,请勿错过!
列表框像子窗体一样,可以按要求进行排序能排序的列表框的技术特征:
1、能对列表框进行排序
2、单击一次顺排,再单击一次倒排
3、能够显示排序的顺三角符号和倒三角符号
4、通用的XP式风格通用模块,只需设置一个参数就可实现
5、国际标准的LNC对象命名规则,标准的程序注释风格
6、通用的关于窗体
7、真正透明图片的实现
8、清爽程序界面的一些思想(参考了黄海的程序)
9、透明按钮的使用

报名及详细信息:http://www.office-cn.net/thread-118946-1-1.html

[attach]55548[/attach]



部分代码预览


  1. '===============================================================================
  2. '-函数名称:         SetListOrder
  3. '-功能描述:         按指定的列对列表框数据进行排序
  4. '-输入参数:         参数1:rintColumn Integer 要排序的列
  5. '-                  参数2:rlst ListBox 要排序的列表框
  6. '-返回参数:         无
  7. '-使用示例:         SetListOrder 1, lstObjDesc
  8. '-相关调用:
  9. '-使用注意:         调用前设置好列表框的列和宽度以及行来源,且行来源要指定具体的字段
  10. '-兼 容 性:         97,2000,XP compatible
  11. '-参考资料:
  12. '-作    者:         王宇虹  修改:王宇虹
  13. '-创建日期;         2002-08-26  更新日期: 2002-10-28 ,2002-11-15
  14. '-图    解:
  15. '===============================================================================


  16. Private Function SetListOrder(rintColumn As Integer, rlst As ListBox)
  17. Dim strCaption As String        '存储标题
  18. Dim ctrColumnLabel As Control   '自制列标题
  19. Dim i As Integer
  20. Dim iPos As Integer             '字符串查找的定位位置
  21. Dim iPos2 As Integer
  22. Dim intColumnCount As Integer   '列表框的列数
  23. Dim strRowSource As String      '列表框的行来源
  24. Dim strFldName As String        '字段名
  25. Dim strFldNames As Variant      '字段名数组
  26. Dim strHeader As String         '列表框本身的列标题内容
  27. intColumnCount = rlst.ColumnCount   '取列表框的列数

  28. strRowSource = lstObjDesc.RowSource '取列表框的行来源的SQL语句,去掉"ORDER BY"后面的内容
  29. iPos = InStr(strRowSource, "Order By")
  30. If iPos > 0 Then strRowSource = Mid(strRowSource, 1, iPos - 1)
  31. iPos = InStr(strRowSource, "select")    '取列表框行来源的SQL语句中"select"与"from"中间的字段串
  32. If iPos > 0 Then iPos = iPos + 7
  33. iPos2 = InStr(strRowSource, "from")
  34. strFldName = Mid(strRowSource, iPos, iPos2 - iPos)
  35. strFldNames = Split(strFldName, ",")    '根据","拆分各个字段名称出来




  36. Set ctrColumnLabel = Me.Controls("lblColumn" & rintColumn)
  37.     Application.Echo False      '暂时关闭屏幕刷新,避免对列表框排序时造成画面抖动
  38.     rlst.ColumnHeads = True     '暂时显示列表框的列表题,以便取出标题给自制列标题
  39.     strHeader = rlst.Column(rintColumn, 0)  '取出列表框当前列的列标题
  40.     strCaption = ctrColumnLabel.Caption     '取出自制列标题
  41.     strFldName = strFldNames(rintColumn)    '取出当前列所对应的字段名称
  42.     iPos = InStr(strFldName, " as")         '可能用户会使用 fldname as fldname1这种方式,故截取字符
  43.     If iPos > 0 Then strFldName = Mid(strFldName, 1, iPos - 1)
  44.    
  45.     Select Case Right(strCaption, 1)        '判断当前自制列标题的标题内容
  46.    '.......................
复制代码



作者: roych    时间: 2015-1-28 18:10
比较感兴趣的是那个三角符号是怎么弄出来的。感觉有些像ListView……




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