如果列表視圖(在詳細模式下)向下滾動,然後重新調整列表視圖的大小,並且如果在Resize事件或甚至Layout事件中調整列大小,則內容會嚴重損壞。如何解決Windows ListView問題?
要重現,使一個新的C#項目,並把這個代碼在那裏:
private void Form1_Load(object sender, EventArgs e)
{
ListView lv = new ListView();
lv.Size = ClientSize;
lv.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
lv.Columns.Add(new ColumnHeader());
lv.Columns.Add(new ColumnHeader());
lv.View = View.Details;
lv.FullRowSelect = true;
lv.Resize += lv_Resize;
Controls.Add(lv);
string[] s = new string[2];
s[0] = "hrd";
s[1] = "igwegmg";
for (int i = 0; i < 20; i++)
{
lv.Items.Add(new ListViewItem(s));
}
lv_Resize(lv, null);
}
private void lv_Resize(object sender, EventArgs e)
{
ListView lv = (ListView)sender;
lv.Columns[1].Width = lv.ClientSize.Width - lv.Columns[0].Width;
}
運行它,滾動列表下來了一點,調整窗體通過拖動窗體底部顯示所有項目向下。
將其縮小爲滾動條出現的位置,然後會變得更糟。或者而不是調整大小,只是最大化和恢復表單。
請注意,還有一堆(取決於你滾動多少)在列表視圖頂部的空項目,你不能點擊它們。要恢復正常,你必須做兩件事之一。
重新填充項目(不好 - 我有太多的項目,我失去了我的滾動位置)。
如果將窗體大小調整爲滾動條彈出的位置,然後將滾動條滾動到底部,然後將鼠標移出滾動條,然後返回滾動條頂部,您將看到滾動條調整自己的大小,此時您可以將滾動條拖動到頂部,然後將其調回正常。
如果RedrawItems
,那麼至少你可以再次看到所有項目,但你仍然可以在頂部的空白項目。在調整大小/佈局事件後調用RedrawItems
的函數並不總是有效。
關於這個bug的任何想法?我真的不想使用任何其他控件或第三方軟件。
你說「內容遭到損壞嚴重」。定義。壞數據,視覺僞像? – DonBoitnott
視覺文物。文字消失,中途重新出現,真空行上方出現空行。 – Dorf
你自己在畫這些物品嗎?這聽起來像是一個簡單的刷新問題。 – DonBoitnott