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

2023-12-30

我有一个 ListView,其中包含“名称”、“预期”、“总计”列,我想在末尾添加另一列“重新计数”。理想情况下,仅当“预期”值大于“总计”值时,“重新计数”列才会有一个复选框。

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

有人知道我还能做什么吗?


实际上,实现起来相对简单,前提是您愿意忍受 P/Invoke 的苦差事来访问内置于本机 Windows 控件中但不由 .NET FW 公开的功能。

我演示在我的回答中 https://stackoverflow.com/questions/4826556/treeview-remove-checkbox-by-some-nodes/4826740#4826740如何使用 TreeView 控件完成完全相同的操作,并且考虑到 ListView 与 TreeView 的相似程度,因此可以使用 ListView 以几乎相同的方式完成此操作并不特别令人惊讶。

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

' P/Invoke declarations
Private Const LVIF_STATE As Integer = &H8
Private Const LVIS_STATEIMAGEMASK As Integer = &HF000
Private Const LVM_FIRST As Integer = &H1000
Private 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 IntPtr
End 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 IntPtr
End 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

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

     Sample ListView, with checkboxes removed from individual items

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 ListView 控件中的各个项目中删除复选框? 的相关文章

随机推荐

  • 如何保存具有列表视图的片段的状态

    这是一个情况 我想从片段 A gt B gt C 导航 B Fragment中有listview 在项目上单击我打开详细视图 C 片段 当然 我使用了替换方法并在从 B 到 C 的事务处理时添加了 addtoBackStack null 以
  • 如何更改 iOS 7 中 tabBarItems 的文本和图标颜色?

    如何更改 iOS 7 中 UITabBar 和 UITabBarItems 的文本和图标颜色 对于未选择的选项卡栏项目 默认的灰色文本看起来很暗且难以阅读 为此 您需要做两件事 1 如果要自定义TabBar本身 需要为tabBarContr
  • 使用 Spring Data 将 DBObject 插入 MongoDB

    我尝试使用 Spring Data 将以下 DBObject 插入 MongoDB BasicDBObject document new BasicDBObject document put country us document put
  • 在 Visual Studio 中使用 NLog 设置具有多个项目的 C# 解决方案

    我在 Visual Studio 2012 中的解决方案当前包含两个项目 DLL WPF 应用程序 需要 DLL 的方法 DLL 和 WPF 应用程序都使用NLog用于记录 目前每个项目都包含NLogDLL 本身 这是我不明白的地方 对我来
  • 背景图像未显示在 Heroku 中

    我在本地使用的 Heroku 网站的背景图像有问题 background image url background stripe png 有效 但部署后文件已损坏 我尝试过使用 background image image url back
  • VBA:如何仅保留字符串中的日期值?

    我有一个下面的字符串 想知道如何从中提取日期值并将它们存储在单独的单元格中 11AUG2016 更改 gggqqq2i8yj 29SEP2016 删除 tyijdg298 30SEP2016 添加 mkdjenb200 03OCT2016
  • 报告不确定性:给定平均值和标准误差,仅显示有效数字

    目的是显示多次观察的结果 而不需要 不必要的数字 即用 与给定一致的有效数字位数 不确定 For example if computed mean 123 45 and err 0 0012345 then the expected out
  • 如何使用 Golang 将文件添加到现有 zip 文件

    我们可以创建一个 zip 新文件并使用 Go 语言添加文件 但是 如何使用 GoLang 添加带有现有 zip 文件的新文件 如果我们可以使用Create函数 如何获取zip writer引用 有点困惑 经过更多分析 我发现 无法使用现有的
  • Mongoid 限制删除多个

    使用mongoid 如何删除前10000个文档error message字段是 Error not found 原生 mongo 查询将被愉快地接受 MongoDB 支持删除限制 删除命令从集合中删除文档 单个 删除命令可以包含多个删除规范
  • System.StackOverflowException WPF MVVM

    我正在尝试使用 MVVM 在 WPF 中创建一个简单的数字时钟 我有一个带有装订的标签 背后的代码很简单 每秒都会引发一个属性更改事件 并且我有一个 stackoverflow 异常 有人可以帮忙吗 public partial class
  • 如何调用 script 标签中定义的 javascript 函数?

    Example 我该怎么打电话test 编辑 我没有正确解释这一点 我正在使用node js的request模块来加载包含javascript函数的外部html文件 request get options function error re
  • 在 vim 中映射 Shift 键

    I m having an issue when mapping the Shift key in VIM I want Ctrl L to behave differently than Ctrl Shift L 所以我有这个 for i
  • 数据流管道和 pubsub 模拟器

    我正在尝试设置我的开发环境 我没有在生产中使用 google cloud pubsub 而是使用 pubsub 模拟器进行开发和测试 为了实现这一点 我设置了以下环境变量 export PUBSUB EMULATOR HOST localh
  • 蓝牙配对时未调用 BroadcastReceiver

    很简单 我唯一的代码是这样的 final BroadcastReceiver mReceiver new BroadcastReceiver Override public void onReceive Context context In
  • Python 集合.counter

    python新手 想知道如何告诉python第3行中的数据都是一个数字而不是单个数字 我正在使用 collections Counter 但它可能不是正确的 datafile csv Z4 29 Mar 13 Name 1 1234567
  • 使用 R markdown、knitr、pandoc、beamer 绘图大小和分辨率

    默认情况下不适合幻灯片 甚至不通过任何其他方式打印 这是 Rmd 编辑 看来你必须在每个块中使用plot 现在打印第二个图 Plot should show at high resolution r echo FALSE comment l
  • 如何在 php 中获取部分从 jquery 加载的页面的整个 html

    我这问题好几天了 我必须从 php 加载页面的整个 html 在此页面上有一个 jquery 函数 当所有页面加载完毕时会调用该函数 这个函数将其他html加载到页面中 所以我必须加载所有html 也加载了jquery的部分 我可以知道我得
  • 如何检测软键盘输入法是否覆盖整个屏幕?

    我正在创建一个应用程序 用户可以在其中单击选项卡 并且将以编程方式显示软键盘 但是 如果软键盘要覆盖整个屏幕 如提取的 EditText 我不想显示软键盘 如下所示 检测屏幕方向可能会有所帮助 但据我所知 在平板电脑上 即使在横向上 软键盘
  • 获取主干集合中属性不等于某个值的所有模型

    这取自 Backbone js 文档 var musketeers friends where job Musketeer 在那里你可以获得一系列工作平等的模型 那就是 火枪手 但我该如何做相反的事情呢 我怎样才能获得一系列工作不是 火枪手
  • 如何从 ListView 控件中的各个项目中删除复选框?

    我有一个 ListView 其中包含 名称 预期 总计 列 我想在末尾添加另一列 重新计数 理想情况下 仅当 预期 值大于 总计 值时 重新计数 列才会有一个复选框 到目前为止 我已经获得了带有列的 ListView 并且可以在左侧添加一个