c# - 如何在行选择中保留带有 "Checking"复选框的 C# Listview 控件?

标签 c# winforms compact-framework .net-1.1 pocketpc

环境

  • 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 = trueView = 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/

相关文章:

c# - 如何将文本从动态生成的用户控件传输到文本框

winforms - 使用 ReactiveUI 和 Windows 窗体绑定(bind)到多个 RadioButtons

c# - DataGridView 单元格中的多行文本

.net - 是否可以从另一个设置文件中获取 Resharper 设置文件 'inherit'?

.net - 您知道 Compact 和 Full Framework 代码之间的运行时差异吗?

c# - 在 Linq 的 GroupBy 中取 1

c# - DateTime.TryParseExact 格式 MM/dd/yyyy

c# - 无法从客户端执行服务器命令

c# Focus() 似乎触发了 Leave() 方法

c# - 如何在 Compact Framework c# 中遍历 BindingSource 项