在 Winform 中,listview控件无法事先修改某一项的颜色和字体,在控件属性处修改的是所有行或项的颜色和字体。一般来说,常常要使选择的行或项与其它行或项颜色不同以标示当前项,常见如用户点击了某一分类,显示属于该类的所有产品,被点击的类就是当前类,得用光亮的颜色显示以区别其它类,从而引导用户一类类浏览,不至于搞得眼花瞭乱,这就是所谓的用户体验。
那么应该如何修改当前行或项的颜色和字体?这得用代码动态实现,下面举例说明。
一、创建一个listview列表
拖一个 listview 控件到主窗体中,并命名为 lv,向 lv 添加项(模拟分类)的代码如下:
private void AddCategory()
{
lv.FullRowSelect = false;
for(int i = 0; i < 11; i++)
lv.Items.Add(i.ToString());
}
二、修改选中项的颜色和加粗字体(分类)
首先为 listvew 添加选择索引改变事件 lv_SelectedIndexChanged,并在该事件中定如下代码:
private void lv_SelectedIndexChanged(object sender, EventArgs e)
{
if (lv.SelectedItems.Count > 0)
{
foreach (ListViewItem lvi in lv.Items)
lvi.ForeColor = Color.Black;
//修改选中项颜色
lv.SelectedItems[0].SubItems[0].ForeColor = Color.Red;
//加粗字体
Font f = new Font(Control.DefaultFont, FontStyle.Bold);
lv.SelectedItems[0].SubItems[0].Font = f;
//去掉选中项背景
lv.SelectedItems[0].Selected = false;
}
}
效果图如下:
图1
三、修改选中行的颜色和加粗字体(表格)
这里跟上面的方法用同一个 listview 控件,把 listview 设置成一个表格,代码如下:
private void AddListview()
{
lv.GridLines = true;
lv.View = View.Details;
lv.FullRowSelect = true;
lv.CheckBoxes = true;
lv.Columns.Add("学号", 100, HorizontalAlignment.Center);
lv.Columns.Add("姓名", 100, HorizontalAlignment.Center);
lv.Columns.Add("性别", 80, HorizontalAlignment.Center);
lv.Columns.Add("年龄", 80, HorizontalAlignment.Center);
ListViewItem lvi = new ListViewItem();
lvi.SubItems.Clear();
lvi.SubItems[0].Text = "001";
lvi.SubItems.Add("李睛云");
lvi.SubItems.Add("男");
lvi.SubItems.Add("20");
lv.Items.Add(lvi);
lvi = new ListViewItem();
lvi.SubItems[0].Text = "002";
lvi.SubItems.Add("龙丹玲");
lvi.SubItems.Add("女");
lvi.SubItems.Add("18");
lv.Items.Add(lvi);
lvi = new ListViewItem();
lvi.SubItems[0].Text = "003";
lvi.SubItems.Add("王露飞");
lvi.SubItems.Add("男");
lvi.SubItems.Add("19");
lv.Items.Add(lvi);
}
修改选中行的颜色和字体,跟上面的方法也一样(即 lv_SelectedIndexChanged(object sender, EventArgs e) 方法),运行效果图如下:
图2