如何从行选择中的“检查”中保留带有复选框的C#Listview控件?

问题描述

| 环境 Windows XP x32 Visual Studio 2005标准版 运行Windows Mobile 2003(Pocket PC 2003)的霍尼韦尔海豚9500(带有内置条形码扫描仪和黑白摄像头)使用此处的SDK。 .NET Compact Framework 1.0 SP3和.NET Framework 1.1 使用VC# 目标 我在窗体上有一个带有
CheckBoxes = true
View = Details
的ListView控件,但我不希望用户将复选框设置为“ checkable”。我将其用于记录完成的状态显示。但是,我确实想使用事件处理程序功能通过代码选中该框(即在记录完成时:
lvMeters_ItemCheck(null,null);
)。 问题 我已禁用了复选框本身(我认为该设备上的触摸屏不是很精确)。但是,当选择一行(我有3个字符)时,控件通常会选中该复选框,并且似乎未调用事件处理程序。 我尝试过的事情 我试图从根本上撤消事件处理程序中的操作:
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 select上被调用selecteditemchanged事件处理程序也没有调用此事件处理程序,但是它仍在选择框上处于选中状态。选中框本身时会调用它。 需要其他信息吗? 问走,我会尽力而为! 我是新手 因此,请随时告诉我我做的这件事是完全错误的,应该以不同的方式来做整个事情。     

解决方法

        我不熟悉紧凑框架上ListView的限制,但是在标准框架上,可以使用TreeNode.StateImageIndex属性。未检查/检查状态实际上是使用嵌入在标准winforms代码中的小图像(如果我没记错的话,它们是索引1和2)。因此,例如,如果您这样做:
private void lvMeters_ItemCheck(object sender,ItemCheckEventArgs e)
{
    e.Item.StateImageIndex = 3;
}
它将更改小图标并将其设置为空。您也可以使用ListView ImageList。     ,        igh ...与设计师混淆时,我设法以某种方式从控件中删除了事件处理程序。我在某个时候检查了一下,但它仍然存在,但那时我确实确实存在逻辑/代码问题。 感谢您的回答:/