You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# ListView实现仅高亮选中子项的方法求助

ListView点击仅高亮选中子项的实现方案

要实现点击ListView子项时仅高亮该子项,需要借助**自定义绘制(OwnerDraw)**覆盖默认选中样式逻辑,以下是WinForms环境下的具体实现步骤:

核心思路

ListView原生不支持单独高亮子项,我们需要:

  • 开启自定义绘制模式,接管控件的绘制逻辑
  • 捕获鼠标点击位置,记录当前选中的子项(行+列索引)
  • 在绘制子项时,仅对记录的选中子项应用高亮样式

具体实现步骤

1. 配置ListView基础属性

在设计器或代码中设置:

listView1.OwnerDraw = true; // 开启自定义绘制
listView1.FullRowSelect = false; // 关闭整行选中

2. 记录选中的子项信息

在窗体类中添加字段存储选中状态:

private int _selectedRow = -1;
private int _selectedCol = -1;

3. 处理鼠标点击事件,定位选中子项

添加MouseClick事件处理,通过HitTest获取点击的子项:

private void listView1_MouseClick(object sender, MouseEventArgs e)
{
    var hitTestInfo = listView1.HitTest(e.X, e.Y);
    if (hitTestInfo.Item != null && hitTestInfo.SubItem != null)
    {
        _selectedRow = hitTestInfo.Item.Index;
        _selectedCol = hitTestInfo.Item.SubItems.IndexOf(hitTestInfo.SubItem);
    }
    else
    {
        _selectedRow = -1;
        _selectedCol = -1;
    }
    listView1.Invalidate(); // 触发重绘
}

4. 自定义绘制事件处理

分别处理三个绘制事件,实现子项高亮:

绘制列头(保持默认样式)

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    e.DrawDefault = true; // 使用默认列头绘制逻辑
}

绘制列表项(仅处理基础背景和文本)

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
    e.DrawBackground();
    e.DrawText();
}

绘制子项,实现选中高亮

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    // 判断当前子项是否为选中项
    bool isSelected = e.Item.Index == _selectedRow && e.Item.SubItems.IndexOf(e.SubItem) == _selectedCol;
    
    if (isSelected)
    {
        // 绘制高亮背景与文本
        e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
        e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, SystemBrushes.HighlightText, e.Bounds);
    }
    else
    {
        // 绘制默认样式
        e.DrawDefault = true;
    }
}

扩展说明

  • 如果需要支持键盘导航选中子项,可额外处理KeyDown事件,更新选中的子项索引并触发重绘
  • 可根据需求替换SystemBrushes.Highlight等为自定义颜色,调整高亮样式

内容的提问来源于stack exchange,提问作者SpeedyGonzales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:25:21