[英]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.