编辑:我已经弄清楚为什么文本被绘制为粗体。因为第一列调用OnDrawSubItem两次。谁知道为什么?
我创建了一个继承自ListView类的自定义控件。我已经覆盖了OnDrawSubItem和OnDrawItem方法,如下所示:
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
Rectangle rowBounds = e.SubItem.Bounds;
Rectangle labelBounds = e.Item.GetBounds(ItemBoundsPortion.Label);
Rectangle bounds = new Rectangle(rowBounds.Left + 5, rowBounds.Top + 2, labelBounds.Width - 5, rowBounds.Height + 2);
if (e.Item.Selected)
e.Graphics.DrawString(e.SubItem.Text, Font, Brushes.White, bounds);
else
e.Graphics.DrawString(e.SubItem.Text, Font, Brushes.Black, bounds);
}
protected override void OnDrawItem(DrawListViewItemEventArgs e)
{
e.DrawBackground();
if (e.Item.Selected)
{
Rectangle rowBounds = e.Bounds;
Rectangle bounds = new Rectangle(0, rowBounds.Top, rowBounds.Width, rowBounds.Height);
e.Graphics.FillRectangle(Brushes.Gray, bounds);
}
}
但有些东西不能正常工作。当我向ListView添加一些项目时,文本有点厚。列表视图放在一个选项卡中。当我切换到另一个选项卡并返回带有列表视图的选项卡时,文本似乎很好。所以我尝试制作这个并尝试在项目添加操作结束时添加listView.Refresh()
,但它不起作用:
//code 1
foreach(string s in new string[] { "item1", "item2", "item3", "item4", "item5" })
{
listView.Items.Add(s);
}
listView.Refresh();
输出是:
我也尝试在每次迭代时刷新,但它有点好,但最后一个元素没有刷新:
//code 2
foreach(string s in new string[] { "item1", "item2", "item3", "item4", "item5" })
{
listView.Items.Add(s);
listView.Refresh();
}
输出:
切换选项卡时,所有文本都应该是这样的。
我的两个问题:
另外,也许值得一提的是,如果我添加第二列,第二列就会很好地呈现。