带有上下按钮.NET Framework的ListView移动项

问题描述 投票:0回答:2

我有问题!

我有一个列表视图,该列表视图将具有随机数量的项目(根据文档的页面)。但是我需要选择重新排列这些页面的顺序(这是listview项)。我做了一个可以在两个按钮(上和下)上使用的功能,但它没有正确排序。例如:我有两个项目(第1页和第2页),我想将第2页移动到位置0,它会移动,但是在列表视图中它仍显示前一个顺序。除其他示例外,我还制作了更多页面。下面是代码和他的电话。

private void moveImgList(int direction)
    {
        if (list_image.SelectedItems == null) { return; }

        ListViewItem item = list_image.SelectedItems[0];

        int newIndex = item.Index + direction;

        if (newIndex < 0 || newIndex >= list_image.Items.Count) { return; }

        list_image.Items.Remove(item);
        list_image.Items.Insert(newIndex, item);

    }

方法调用

private void btnLeft_Click(object sender, EventArgs e)
    {
        this.moveImgList(-1);
    }

    private void btnRight_Click(object sender, EventArgs e)
    {
        this.moveImgList(1);
    }

Application Windows Form .NET Framework

My code

那样工作!

`private void moveItem(int方向){如果(listView1.SelectedItems.Count == 0){返回; }

        ListViewItem item = listView1.SelectedItems[0];

        int newIndex = item.Index + direction;

        if (newIndex < 0 || newIndex >= listView1.Items.Count) { return; }

        var currentView = listView1.View;
        listView1.BeginUpdate();
        listView1.View = View.Details;
        listView1.Items.Remove(item);
        listView1.Items.Insert(newIndex, item);
        listView1.EnsureVisible(newIndex);
        listView1.View = currentView;
        listView1.EndUpdate();
    }`
c# winforms listview .net-4.0
2个回答
0
投票

尝试在列表视图对象上调用BeginUpdate()EndUpdate()方法。这将强制UI重新绘制控件。

 list_image.BeginUpdate();
 list_image.Items.Remove(item);
 list_image.Items.Insert(newIndex, item);
 list_image.EndUpdate();

0
投票

当您删除项目时,索引会发生更改,并且如果插入的是最后一个项目,则可能会插入错误的位置,甚至会出现异常。我认为交换2件更好:

private void moveImgList(int direction)
{
    if (list_image.SelectedItems == null) return; 
    int index = list_image.SelectedIndex;
    if((direction == -1 && index == 0) || (index == list_image.Items.Count - 1 && direction =1)
        return;
    int newIndex = index + direction;
    tmp = list_image.Items[index].Clone();
    list_image.Items[index] = (ListViewItem)list_image.Items[newIndex].Clone();
    list_image.Items[newIndex] = (ListViewItem)tmp;
}

然后这将起作用:

private void btnLeft_Click(object sender, EventArgs e)
{
    moveImgList(-1);
}

private void btnRight_Click(object sender, EventArgs e)
{
    moveImgList(1);
}
© www.soinside.com 2019 - 2024. All rights reserved.