我在我的(C#)程序中有listView。在將項添加到列表視圖後,我更改了一些項目背景和前景色。所有項目都OK和顏色。 如果我使用listView排序,那麼所有前6種顏色已經消失。有些休閒用品的顏色混亂。 這種效果發生在默認排序和我自己的自定義排序器上。 我對listView項目數據做了很多更改,最後當listView被多次排序後,所有的顏色都處於正確的位置。 有什麼不對?listView排序時listView背景和前景顏色問題
0
A
回答
0
徘徊了一會兒,我不知道你會做錯什麼。似乎爲我工作得很好,但沒有看到你的代碼很難說出發生了什麼。無論如何,這裏有一個簡單的工作示例,可以幫助您找出不同之處。只需在詳細信息視圖中創建一個帶有3列ListView的表單:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Color[] backgroundColors = new[] { Color.Green, Color.White, Color.Blue };
Color[] foregroundColors = new[] { Color.Black, Color.Red, Color.Yellow };
Random random = new Random();
for (int i = 0; i < 100; i++)
{
Color backgroundColor = backgroundColors[random.Next(0, 3)];
Color foregroundColor = foregroundColors[random.Next(0, 3)];
ListViewItem listViewItem = listView1.Items.Add(foregroundColor.Name);
listViewItem.SubItems.Add(backgroundColor.Name);
listViewItem.SubItems.Add(Guid.NewGuid().ToString());
listViewItem.BackColor = backgroundColor;
listViewItem.ForeColor = foregroundColor;
}
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
ListViewItemComparer listViewItemComparer = new ListViewItemComparer {SortColumn = e.Column, Sorting = SortOrder.Ascending};
if (listView1.ListViewItemSorter is ListViewItemComparer)
{
ListViewItemComparer listViewItemComparerOld = listView1.ListViewItemSorter as ListViewItemComparer;
if (listViewItemComparerOld != null && listViewItemComparerOld.SortColumn == e.Column)
{
listViewItemComparer.Sorting = (listViewItemComparerOld.Sorting == SortOrder.Ascending) ? SortOrder.Descending : SortOrder.Ascending;
}
}
listView1.ListViewItemSorter = listViewItemComparer;
listView1.Sort();
}
#region ListViewItemComparer
public class ListViewItemComparer : IComparer
{
#region Public Properties
public int SortColumn { get; set; }
public SortOrder Sorting { get; set; }
#endregion
public ListViewItemComparer()
{
SortColumn = 0;
Sorting = SortOrder.Ascending;
}
public int Compare(object x, object y)
{
ListViewItem listViewItem1 = null;
ListViewItem listViewItem2 = null;
string compare1 = string.Empty;
string compare2 = string.Empty;
if (Sorting == SortOrder.Ascending)
{
listViewItem1 = (ListViewItem)x; listViewItem2 = (ListViewItem)y;
}
if (Sorting == SortOrder.Descending)
{
listViewItem1 = (ListViewItem)y; listViewItem2 = (ListViewItem)x;
}
if (listViewItem1 != null && (SortColumn < listViewItem1.SubItems.Count) && (listViewItem1.SubItems[SortColumn] != null))
{
compare1 = listViewItem1.SubItems[SortColumn].Text;
}
if (listViewItem2 != null && (SortColumn < listViewItem1.SubItems.Count) && (listViewItem2.SubItems[SortColumn] != null))
{
compare2 = listViewItem2.SubItems[SortColumn].Text;
}
return string.Compare(compare1, compare2);
}
}
#endregion
}
+0
對不起,我的程序改變了一些子項目的顏色。 – 2010-02-06 08:28:42
0
現在它可以工作。我只是關閉排序:
listView1.ListViewItemSorter = null;
而且所有更改後已經取得,排序再次開啓:
listView1.ListViewItemSorter =新的分揀機();
相關問題
- 1. WPF ListView行背景顏色
- 2. ListView項背景顏色
- 3. Android的ListView和背景顏色
- 4. ListView背景顏色不是白色
- 5. Android - Listview背景問題
- 6. 更改ListView的背景選擇顏色?
- 7. ListView android丟失背景顏色
- 8. Winform ListView背景顏色LargeIcon視圖
- 9. ListView控件設置背景顏色
- 10. ListView的背景顏色邏輯
- 11. 在ListView中回收的背景顏色
- 12. ListView的項目更改背景顏色
- 13. Android - ListView行背景顏色變化
- 14. 更改VB6中ListView的背景顏色
- 15. 關於設置ListView項目背景顏色的問題
- 16. css背景顏色問題
- 17. 背景顏色問題
- 18. CSS背景顏色問題
- 19. html背景顏色問題
- 20. ListView Android背景
- 21. ListView - 設置不同背景顏色的前兩個項目
- 22. ListView顏色問題
- 23. 更改Winform ListView標題的背景顏色
- 24. Listview背景繪製問題C#Winform
- 25. 自定義ListView背景問題
- 26. Android ListView行背景導致OutOfMemory問題
- 27. Metro應用程序 - ListView - 如何替代ListViewItems的背景顏色
- 28. ListView在滾動時重繪背景顏色
- 29. 在運行時更改Android中ListView的背景顏色
- 30. 如何更改ListView中的文本顏色和背景?
顏色是否與相同的行保持不變而不考慮它們的順序? – 2010-02-05 20:18:08
你有任何可以分享的代碼嗎?我有幾個使用System.Windows.Forms.ListView控件,彩色行/文本和自定義ListViewItemComparers沒有任何問題的項目。 – 2010-02-05 20:49:36