最近在做一个邮件程序,想仿照OUTLOOK收信的界面,就是收到的未读邮件是粗体的,点击后就变成常规字体了,用listview如何实现这种效果?

解决方案 »

  1.   

    增加一列,隐藏,当点击后,在此列做个标记,表示读过了,然后在DrawItem事件中画出其他颜色
      

  2.   

    根据读取的数据标识判断是否读取
    private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        e.DrawDefault = false;    SizeF sizef =
            e.Graphics.MeasureString(e.Item.Text, e.Item.Font);    Graphics g = e.Graphics;    Image image = 
            e.Item.ListView.LargeImageList.Images[e.Item.ImageIndex];    g.DrawImage(
            image,
            e.Bounds.Left + (e.Bounds.Width - image.Width) / 2,
            e.Bounds.Top + (e.Bounds.Height - image.Height) / 2,
            image.Height,
            image.Width);    g.DrawString(
            e.Item.Text,
            e.Item.Font,
            new SolidBrush(e.Item.ForeColor),
            e.Bounds.Left + (e.Bounds.Width - sizef.ToSize().Width) / 2,
            e.Bounds.Top + (e.Bounds.Height - sizef.ToSize().Height) / 2);
    }
      

  3.   

    private void bindFont()
            {
                try
                {
                    foreach (DataGridViewRow dgv in dataGridView2.Rows)
                    {
                        string statu = dgv.Cells["dataGridViewTextBoxColumn4"].Value.ToString();
                        if (statu.Equals("no"))
                        {
                            dgv.DefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold);
                        }
                        else
                        {
                            dgv.DefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Regular);
                        }
                    }
                }
                catch (NullReferenceException)
                {
                    MessageBox.Show(LoginInfo.networkMessage);
                }
                catch (Exception)
                {            }
            }