编程开发 购物 网址 游戏 小说 歌词 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
移动开发 架构设计 编程语言 互联网 开发经验 Web前端 开发总结
开发杂谈 系统运维 研发管理 数据库 云 计 算 Java开发
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
  编程开发知识库 -> VB -> Listview 隐藏列的方法 -> 正文阅读
 

[VB]Listview 隐藏列的方法[第1页]

需求:隐藏宽度为0的列,并且不能被拖出来显视,实现真正的隐藏。
现有的方法只能通过API固定所有列不能拖动,所以求解
Option Explicit
   
  Public Type NMHDR
          hwndFrom   As Long
          idFrom   As Long
          code   As Long
  End Type
   
  Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Public Const GWL_WNDPROC = (-4)
  Public Const WM_NOTIFY = &H4E
   
  Public Const HDN_FIRST = -300
  Public Const HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5
  Public Const HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25
  Public Const HDN_BEGINTRACKA = HDN_FIRST - 6
  Public Const HDN_BEGINTRACKW = HDN_FIRST - 26
   
  Private lpPrevWndFunc       As Long
   
  Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
          Select Case uMsg
                  Case WM_NOTIFY
                                  Dim X     As NMHDR                          
                                  CopyMemory X, ByVal lParam, Len(X)                          
                                  If X.code = HDN_BEGINTRACKA Or X.code = HDN_BEGINTRACKW Or _
                                          X.code = HDN_DIVIDERDBLCLICKA Or _
                                          X.code = HDN_DIVIDERDBLCLICKW Then
                                          WindowProc = 1
                                          Exit Function
                                  End If
          End Select     
          WindowProc = CallWindowProc(lpPrevWndFunc, hWnd, uMsg, wParam, lParam)
  End Function
   
  Public Sub LockHead(ByVal hWnd As Long)
          lpPrevWndFunc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
  End Sub
   
  Public Sub UnLockHead(ByVal hWnd As Long)
          SetWindowLong hWnd, GWL_WNDPROC, lpPrevWndFunc
  End Sub
调用: Call LockHead(Listview1.hWnd)
             Call UnLockHead(Listview1.hWnd)

回复:
方便调试的实例:http://pan.baidu.com/s/1kVj5kQb

回复:
ListView 控件
            
ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。
语法
ListView
说明
可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一: 
大(标准)图标
小图标
列表
报表 
View 属性决定在列表中控件使用何种视图显示项目。还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示。另外,还可管理列表中项目的排序方法和选定项目的外观。
ListView 控件包括 ListItem 和 ColumnHeader 对象。ListItem 对象定义 ListView 控件中项目的各种特性,诸如: 
项目的简要描述。
由 ImageList 控件提供的与项目一起出现的图标。
附加的文本片段,称作子项目,它们与显示在报表视图中的 ListItem 对象关联。 
可以使用 HideColumnHeaders 属性决定是否在 ListView 控件中显示列标头。列标头可以在设计时添加,也可以在运行时添加。设计时,使用 ListView“控件属性”对话框的“列首”选项卡添加列标头。运行时,使用 Add 方法添加 ColumnHeader 对象到 ColumnHeaders 集合中。
发行注意   ListView 控件是 Mscomctl.ocx 文件中一组 ActiveX 控件的一部分。若要在应用程序中使用 ListView 控件,则必须将 Mscomctl.ocx 文件添加到工程中。当发行应用程序时,请将 Mscomctl.ocx 文件安装到用户的 Microsoft Windows System 或 System32 目录下。关于如何将 ActiveX 控件添加到 Visual Basic 工程的详细信息,请参阅 Visual Basic《程序员指南》。

回复:
转变一下思路,不想被看到的数据为啥一定要放在listview里面?目的不就是为了让客户选择某一行的时候你能得到这个隐藏的数据么,将这列数据添加到对应的数组或者集合里面也可以实现。
你发的例子的声明区和form load稍微改一下,加一个item被点击的事件,演示一下隐藏列。
只不过在item新增和删除的时候不要忘记同步修改集合里面的内容。



Dim colHideCol As New Collection '定义一个模块级的集合用于存放隐藏的东西
Private Sub Form_Load()
    Dim i As Integer
    Dim mRow As ListItem
    Me.ScaleMode = vbTwips
  '---------------------------
  '初始化
  '--------------------------
    lv.View = lvwReport
    lv.FullRowSelect = True
    lv.Checkboxes = True
    lv.ColumnHeaders.Add , , "序号"
    lv.ColumnHeaders.Add , , "标题"
    lv.ColumnHeaders.Add , , "标题1", 0   '这列宽度为0 但是可以被拉开
    
    For i = 1 To colHideCol.Count '初始化清空一下
        colHideCol.Remove (1)
    Next
    For i = 0 To 40
      Set mRow = lv.ListItems.Add(, , CStr(i))
      mRow.SubItems(1) = "欢迎光临枕善居网站,谢谢 " & i
      colHideCol.Add "不显示的列" & i, "K" & mRow.Index  '这里把不想显示的列放入同步处理的集合里
    Next
  
   lv.ListItems(3).Checked = True
   lv.ListItems(5).Checked = True
   lv.ListItems(13).Checked = True
   lv.ListItems(23).Checked = True
   lv.ListItems(6).Checked = True
   lv.ListItems(9).Checked = True
   

End Sub


Private Sub lv_ItemClick(ByVal Item As MSComctlLib.ListItem)
    MsgBox "该行隐藏列内容:" & colHideCol.Item("K" & Item.Index)
End Sub


回复:
我想实现的是可以随时通过设置某列的列宽达到隐藏和显视的目的.

回复:
换控件吧,比如 Xtreme SuitePro ActiveX 的Report控件。直接就实现你的要求了。

回复:
控件做好了,想还个功能,能选择所要显视的列,就差这个功能了,各位能帮出个主意吗,我的代吗能改改吗


回复:
  VB 最新文章
用WebBrowser加载网页后,如何取得网页源代
API LoadImage
新年大吉,开帖散分!
如何利用vba将excel生成xml文件
库存金额计算
在C/S架构的客户端,当查询年报表时,比如此
sqllite轻数据库答疑(初学者入门 与精华收
VB6.0拷贝别人的程序,但提示加载sysmon.oc
vb.net DateTimePicker控件显示2个日期调整
VB2013软件里用Parallel.For同时下载多个文
上一篇文章      下一篇文章      查看所有文章
加:2017-09-28 16:41:50  更:2017-10-29 22:39:23 
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年11日历
2018-11-18 9:31:40
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程开发知识库