当我调整列的大小时,它不会使用更新的对齐方式重新绘制数据。我尝试过失效、刷新和其他一些东西。没有一样东西起作用。有谁知道解决办法吗?我还没有在Windows的mono中尝试过。
为了理解我的意思,将这个控件放在一个表单上,并在Linux的mono中运行它:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
class MyListView : ListView
{
private readonly List<ListViewItem> items_ = new List<ListViewItem>();
public MyListView()
{
VirtualMode = true;
Columns.Add("Col 1");
Columns.Add("Col 2");
Columns.Add("Col 3");
Add(new ListViewItem(new[] { "a", "b", "c" }));
Add(new ListViewItem(new[] { "a", "b", "c" }));
Add(new ListViewItem(new[] { "a", "b", "c" }));
Add(new ListViewItem(new[] { "a", "b", "c" }));
Add(new ListViewItem(new[] { "a", "b", "c" }));
}
protected override void OnRetrieveVirtualItem(RetrieveVirtualItemEventArgs e)
{
e.Item = items_[e.ItemIndex];
base.OnRetrieveVirtualItem(e);
}
public void Add(ListViewItem item)
{
items_.Add(item);
VirtualListSize = items_.Count;
}
protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
{
e.DrawText();
base.OnDrawColumnHeader(e);
}
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
var text = ((ListViewItem.ListViewSubItem)e.SubItem).Text;
using (var brush = new SolidBrush(e.SubItem.ForeColor))
{
e.Graphics.DrawString(text, Font, brush, e.Bounds);
}
base.OnDrawSubItem(e);
}
protected override void OnColumnWidthChanged(ColumnWidthChangedEventArgs e)
{
base.OnColumnWidthChanged(e);
Invalidate(true); // Nope, that didn't work
Refresh(); // Nope, that didn't work
}
}发布于 2010-05-08 03:31:45
我想通了。虽然我的存储和重用ListViewItem实例的方法在Windows中运行良好,但mono更喜欢我在OnRetrieveVirtualItem的主体中重新创建它们。
https://stackoverflow.com/questions/2784917
复制相似问题