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

如何让Windows.Forms ListView项在新增或移动后滚动至可见?

WinForms ListView 确保项可见的实现方法

在Windows Forms的ListView中,并没有WPF里的ScrollIntoView()方法,但可以通过ListViewItem的EnsureVisible()方法轻松实现项的自动滚动可见,以下是针对不同场景的具体实现:

添加新项时确保可见

当你向ListView添加新项后,直接调用该项的EnsureVisible()方法即可让列表自动滚动到该项所在位置:

// 创建并添加新项
ListViewItem newItem = listView1.Items.Add("新的列表项");
// 确保新项进入可视区域
newItem.EnsureVisible();

上下移动项时确保可见

处理项的移动逻辑后,重新选中目标项并调用EnsureVisible(),就能保证移动后的项保持可见:

向上移动项示例

private void btnMoveUp_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count == 0) return;

    ListViewItem selectedItem = listView1.SelectedItems[0];
    int currentIndex = selectedItem.Index;

    if (currentIndex > 0)
    {
        // 执行移动操作
        listView1.Items.Remove(selectedItem);
        listView1.Items.Insert(currentIndex - 1, selectedItem);
        // 重新选中并确保可见
        selectedItem.Selected = true;
        selectedItem.EnsureVisible();
    }
}

向下移动项示例

private void btnMoveDown_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count == 0) return;

    ListViewItem selectedItem = listView1.SelectedItems[0];
    int currentIndex = selectedItem.Index;

    if (currentIndex < listView1.Items.Count - 1)
    {
        // 执行移动操作
        listView1.Items.Remove(selectedItem);
        listView1.Items.Insert(currentIndex + 1, selectedItem);
        // 重新选中并确保可见
        selectedItem.Selected = true;
        selectedItem.EnsureVisible();
    }
}

EnsureVisible()方法会自动处理滚动条的位置,让目标项完全进入可视区域,无需手动计算滚动偏移量,是WinForms下实现该需求最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:42:12