none
关于listview中Item重画的问题 RRS feed

  • 问题

  • 窗体的设计如下,是在窗体上放一个LIstView控件,然后放一个ImageList(ImageSize(50,40))控件,并把listView的largeImageList属性选择ImageList,然后又放置一个TabControl控件
    我在窗体进行Load的时候,我执行以下代码,给listview添加项,代码如下
    for (int i = 0; i < 14; i++)
          {
            ListViewItem lvi=new ListViewItem();
            lvi.Text = DateTime.Now.AddDays(i).ToString("MM月dd日");
            lvi.ToolTipText = dt初始显示时间.AddDays(i).ToString("yyyy-MM-dd");
            lsv预订状态.Items.Add(lvi);        
          }
    这是重画的代码
     private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
        {
          Rectangle rect = e.Bounds;
          rect.Width = rect.Width - 3;
          if ((e.State & ListViewItemStates.Selected) != 0)
          {
            //更改选中的背景颜色
            e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(215, 232, 252)), rect);
            //绘制边框
            e.Graphics.DrawRectangle(new Pen(Color.FromArgb(125, 162, 206)), rect);
          }
          else
          {
            //默认的背景颜色
            using (SolidBrush bBrush = new SolidBrush(Color.White))
            {
              e.Graphics.FillRectangle(bBrush, rect);
              //绘制边框
              e.Graphics.DrawRectangle(new Pen(Color.FromArgb(125, 162, 206)), rect);
            }
          }
          if (((ListView)sender).View != View.Details)
          {
            Font ft = new System.Drawing.Font(FontFamily.GenericSansSerif, 9);
            SolidBrush fontbrush = new SolidBrush(Color.Blue);
            StringFormat Format = new StringFormat();
            Format.Alignment = StringAlignment.Center;
            e.Graphics.DrawString(e.Item.Text, ft, fontbrush, new RectangleF(rect.Left, rect.Top+10, rect.Width, rect.Height), Format);
            ft.Dispose();
            fontbrush.Dispose();
          }
          
        }
    这样我在窗体运行的时候,我点击listview的Item项时,每个项能处于选中状态,我点击TabControl控件的时候,他的选中状态就没有了.listView当中有个属性HideSelecttion默认值为true,
    当我把HideSelecttion设置成False的时候,listView中的所有Item的状态都变成了选中的状态.现在我想实现的是,我要重画ListView的item项,当我点击那个Item,那个Item进行选中,而且我在本窗体当中点击除了(ListView控件)其他控件的时候,我要把listView当中选中哪一个项给显示出来,就像windows Exploer当中的效果,我应该怎么做呢?
    谢谢,
    我还发现如果我不重画ListView的item的话,那是通过HideSelection可以实现效果.但是现在ListView的Item不能满足要求,我只能重画了.
    2010年6月12日 0:44

答案

全部回复