繁体   English   中英

删除组时,ListView的顶部显示空白

[英]Empty space appears at the top of ListView when removing Groups

我的音乐播放器在“详细信息”模式下使用ListView显示曲目,并使用ListViewGroup将专辑曲目分组在一起。

我创建了一个事件,当单击专辑的ListViewGroup时,它会删除一个专辑中的所有曲目。 如果删除轨道时ListView没有向下滚动,则效果很好。 如果向下滚动ListView,将删除相册,但在ListView的顶部和标题与第一组之间,将出现较大的不可单击的空白区域。

第一张图片,ListView中有3个相册(向上滚动)

在此处输入图片说明


第二张图片,上一张相册已删除,一切都很好!

在此处输入图片说明


好的,然后在删除一组项目时向下滚动ListView

第三张图片,ListView中的3个相册(向下滚动)

在此处输入图片说明


第四个图像,删除了最后一个相册,顶部出现空白区域,最后一个曲目跟踪ListView是否未显示!

在此处输入图片说明


我认为这与我的代码无关,而是ListView中的错误? 有人注意到相同的行为吗? 有什么技巧可以防止这种情况发生?


编辑:添加了删除项的代码(根据用户要求)

List<ListViewItem> delItems = new List<ListViewItem>(); // creating list of items to be removed

foreach (ListViewGroup group in listView1.Groups)
{
    if (Convert.ToInt32(group.Tag) == groupNumber) // all groups have individual number in tag field
    {
        foreach (ListViewItem item in group.Items)
        {
            delItems.Add(item);
        }
    }
}

foreach (ListViewItem item in delItems)
{
    item.Remove();
}

EDIT2:添加了代码以检查是否单击了组

由于没有真正的方法来处理群组点击,因此我做了丑陋的处理。 但这有效。 首先,我在ListView中使用了MouseDown事件。 然后,我检查是否有用户点击的项目。 如果用户单击组,则该项目为null,并且for循环会增加i并检查是否可以立即找到该项目。 最终找到项目后,我们知道该项目属于我们单击的组。 因此,我们获得了项目组标签,在其中记录了它是什么组。

private void listView1_MouseDown(object sender, MouseEventArgs e)
{
    ListViewItem item;

    for (int i = 0; i < 25; i++) // group height is not more that 25 pixels.
    {
        item = listView1.GetItemAt(e.X, e.Y + i);

        if (item != null)
        {
            if (i > 1) // bigger than 1, because there is 1 pixel gap between listviewitems when using groups
            {
                if (e.Button == MouseButtons.Middle) removePlaylistGroup(Convert.ToInt32(item.Group.Tag));
            }
            else
            {
                if (e.Button == MouseButtons.Middle) removePlaylistItem(item.Index);
            }
            break;
        }
    }
}

这是所有发生的原因,因为从ListView删除项目显然会引发Form1_Layout事件。 在其中,如果表单布局发生更改,我将使用listView1.BeginUpdate() ...调整listView1的大小。 不知何故弄乱了我的listView。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM