.net – 如何从ListView控件中的各个项目中删除复选框?

.net – 如何从ListView控件中的各个项目中删除复选框?,第1张

概述我有一个列表’Name’,’Expected’,’Total’的ListView,我想在最后添加另一个列’Recount’.仅当“预期”值大于“总计”值时,“重新计数”列才会有一个复选框. 到目前为止,我已经获得了带有列的ListView,并且可以在左侧添加一个复选框,但是该复选框不在列标题下(尽管我可以放置另一个没有值的列来解决这个问题)和这是所有的记录. 任何人都有什么想法我还能做些什么? 这 我有一个列表’name’,’Expected’,’Total’的ListVIEw,我想在最后添加另一个列’Recount’.仅当“预期”值大于“总计”值时,“重新计数”列才会有一个复选框.

到目前为止,我已经获得了带有列的ListVIEw,并且可以在左侧添加一个复选框,但是该复选框不在列标题下(尽管我可以放置另一个没有值的列来解决这个问题)和这是所有的记录.

任何人都有什么想法我还能做些什么?

解决方法 这实际上相对简单,只要您愿意忍受P / Invoke的苦差事来访问本机 Windows控件中内置的功能,但.NET FW不会公开.

我演示了in my answer here如何使用TreeVIEw控件完成同样的事情,并考虑到ListVIEw与TreeVIEw的相似之处,使用ListVIEw以非常相同的方式完成这一点并不特别令人惊讶.

这是所有必需的代码(确保您已为System.Runtime.InteropServices命名空间添加了imports声明):

' P/Invoke declarationsPrivate Const LVIF_STATE As Integer = &H8Private Const LVIS_STATEIMAGEMASK As Integer = &HF000Private Const LVM_FirsT As Integer = &H1000Private Const LVM_SETITEM As Integer = LVM_FirsT + 76<StructLayout(LayoutKind.Sequential,Pack:=8,CharSet:=CharSet.auto)> _Private Structure LVITEM   Public mask As Integer   Public iItem As Integer   Public iSubItem As Integer   Public state As Integer   Public stateMask As Integer   <MarshalAs(UnmanagedType.LPTStr)> _   Public lpszText As String   Public cchTextMax As Integer   Public iImage As Integer   Public lParam As IntPtrEnd Structure<Dllimport("user32.dll",CharSet:=CharSet.auto)> _Private Shared Function SendMessage(ByVal hWnd As IntPtr,ByVal Msg As Integer,ByVal wParam As IntPtr,ByRef lParam As LVITEM) As IntPtrEnd Function''' <summary>''' HIDes the checkBox for the specifIEd item in a ListVIEw control.''' </summary>Private Sub HIDeCheckBox(ByVal lvw As ListVIEw,ByVal item As ListVIEwItem)   Dim lvi As LVITEM = New LVITEM()   lvi.iItem = item.Index   lvi.mask = LVIF_STATE   lvi.stateMask = LVIS_STATEIMAGEMASK   lvi.state = 0   SendMessage(lvw.Handle,LVM_SETITEM,IntPtr.Zero,lvi)End Sub

然后你可以简单地调用上面的方法:

Private Sub btnHIDeCheckForSelected_Click(ByVal sender As Object,ByVal e As EventArgs)   ' HIDe the checkBox next to the currently selected ListVIEwItem   HIDeCheckBox(myListVIEw,myListVIEw.SelectedItems(0))End Sub

生成看起来有点像这样的东西(点击番茄和黄瓜项目的“隐藏检查”按钮后):

总结

以上是内存溢出为你收集整理的.net – 如何从ListView控件中的各个项目中删除复选框?全部内容,希望文章能够帮你解决.net – 如何从ListView控件中的各个项目中删除复选框?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1144464.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存