2009-11-25 63 views
0

我在WinForms C#ListView中有一個小故障(用自定義修改對所有列進行排序和過濾,但它也發生在標準ListView中)。WinForms ListView空行故障

我修改的ListView項目本(相當標準)模式:

BeginUpdate(); 
// add some items 
// remove some other items 
Sort(); 
EndUpdate(); 

但是,如果我打電話的時候ListView控件已滾動這個代碼,然後我才真正獲得一些空的(非可選)行物品和2個滾動條,即使他們不需要。

它看起來像一個圖形故障,因爲當我滾動列表,然後空項目消失。

有沒有人遇到過這個問題?

+0

這種隱晦的問題需要repro項目來縮小可能的原因。遠景:EndUpdate()已經調用Sort(),省略你的調用,看看它是否有所作爲。 – 2009-11-25 14:39:16

+0

已刪除排序(),沒有區別。 我正在測試一個小項目,但我不能重現這個問題,所以我的代碼有一些錯誤,但我想檢查是否有人知道這樣的小故障 感謝很多 – Filini 2009-11-25 15:00:54

回答

1

好的,我發現了這個問題。在調整大小期間調用設置列寬度= -2的操作讓所有者繪製過濾器變得糟糕......

0

此ListView圖形錯誤。如果在更改ListView大小的同時更改其列的寬度,則可以重現類似的問題。作爲解決方案,該方法建議在單獨的線程中更改寬度。

private void ListView_SizeChanged(object sender, EventArgs e) 
{ 
    var widthChangedThread = new Thread(() => SetNewColumnSize()) {IsBackground = true}; 
    widthChangedThread.Start();    
} 

private void SetNewColumnSize() 
{ 
    Invoke(new MethodInvoker(() =>_columnHeader.Width += 10)); 
}