环境
- Windows XP x32 Visual Studio 2005 标准版
- Honeywell Dolphin 9500 运行 Windows Mobile 2003 (Pocket PC 2003) 内置条形码扫描仪和黑白相机 使用位于 here 的 SDK .
- .NET Compact Framework 1.0 SP3 和 .NET Framework 1.1
- 使用 VC#
目标
我在表单上有一个带有 CheckBoxes = true
和 View = Details
的 ListView 控件,但我不希望用户“选中”复选框.我用它来显示记录完成的状态。但是,我确实想使用事件处理函数通过代码检查复选框(即记录完成时:lvMeters_ItemCheck(null, null);
)。
问题
我已禁用复选框本身(我认为,此设备上的触摸屏不是很精确)。但是,选择一行(我有 fullrowselect = true
)时,该控件通常会检查复选框,并且事件处理程序似乎不会被调用。
我尝试过的事情
我试图基本上撤消事件处理程序中的操作:
private void lvMeters_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (sender is ListView)
{
if (e.CurrentValue == CheckState.Checked)
lvMeters.Items[e.Index].Checked = true;
else
lvMeters.Items[e.Index].Checked = false;
}
else if (e.CurrentValue == CheckState.Checked)
lvMeters.Items[e.Index].Checked = false;
else
lvMeters.Items[e.Index].Checked = true;
}
问题是上面的处理程序不会在 ListView 选择上被调用,SelectedItemChanged 事件处理程序也不会调用此事件处理程序,但它仍在选中复选框。选中复选框本身时会调用它。
需要更多信息吗?
尽管问,我会尽力而为!
我是新手
所以请随时告诉我,我这样做是完全错误的,应该以不同的方式做整件事。
最佳答案
我不熟悉 ListView 在紧凑框架上的限制,但在标准框架上,您可以使用 TreeNode.StateImageIndex属性(property)。未检查/检查状态实际上是使用嵌入在标准 winforms 代码中的小图像(如果我没记错的话,它们是索引 1 和 2)。因此,例如,如果您这样做:
private void lvMeters_ItemCheck(object sender, ItemCheckEventArgs e)
{
e.Item.StateImageIndex = 3;
}
它将更改小图标并将其设置为空。您还可以使用 ListView ImageList。
关于c# - 如何在行选择中保留带有 "Checking"复选框的 C# Listview 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257548/