In Depth Banner
Skip Navigation Links

Select your preferred language

Demo application event handlers

First, the following handler enables or disables custom drawing according to the view mode.

    private void customListViewEx1_QueryCustomDraw(object sender, WellFormed.QueryCustomDrawEventArgs e)

    {

      if(e.View!=View.List)

      {

        e.Inform=true;

        e.Subitems=true;

      }

    }

This code draws the icons and checkboxes.

    void DrawAdornments(ListViewItemPaintEventArgs e)

    {

      if(e.SubItemIndex>0)

        return;

 

      int adornmentOffset=2;

 

      CustomListViewEx lv=(CustomListViewEx)e.Item.ListView;

      if(lv.CheckBoxes==true)

      {

        ControlPaint.DrawCheckBox(e.Graphics,

          new Rectangle(e.ItemRect.Left+adornmentOffset,

          e.ItemRect.Top+e.ItemRect.Size.Height/2-SystemInformation.MenuCheckSize.Height/2,

          SystemInformation.MenuCheckSize.Width,

          SystemInformation.MenuCheckSize.Height),

          e.Item.Checked ? ButtonState.Checked : ButtonState.Normal);

        adornmentOffset+=SystemInformation.MenuCheckSize.Width;

      }

      if(lv.SmallImageList!=null && e.Item.ImageIndex>-1)

      {

        e.Graphics.DrawImage(e.Item.ImageList.Images[e.Item.ImageIndex],

          new Rectangle(e.ItemRect.Left+adornmentOffset,

          e.ItemRect.Top+e.ItemRect.Height/2-e.Item.ImageList.ImageSize.Height/2,

          e.Item.ImageList.ImageSize.Width,

          e.Item.ImageList.ImageSize.Height),

          0,0,e.Item.ImageList.ImageSize.Width,e.Item.ImageList.ImageSize.Height,

          GraphicsUnit.Pixel);

        adornmentOffset+=e.Item.ImageList.ImageSize.Width;

      }

    }

 

This event handler draws three different custom view styles

 

    private void customListViewEx1_PaintItem(object sender, WellFormed.ListViewItemPaintEventArgs e)

    {

      switch(e.View)

      {

        case View.Details:

        {

          Brush[] b=new Brush[]{Brushes.Red, Brushes.Blue, Brushes.Green,Brushes.DarkRed,Brushes.DarkBlue, Brushes.DarkGreen};

          if(!e.IsSubItem)

          {

            e.DrawSubItems=true;

            e.DoDefault=false;

          }

          else

          {

            Rectangle rc=new Rectangle(e.ItemRect.Left+e.ItemOffset, e.ItemRect.Top+2, e.ItemRect.Width-e.ItemOffset, e.ItemRect.Height);

            if(e.Item.Selected)

            {

              e.Graphics.FillRectangle(b[e.SubItemIndex+3],e.ItemRect);

              this.DrawAdornments(e);

              e.Graphics.DrawString(e.Item.SubItems[e.SubItemIndex].Text,Font,Brushes.White,rc);

            }

            else

            {

              e.Graphics.FillRectangle(b[e.SubItemIndex],e.ItemRect);

              this.DrawAdornments(e);

              e.Graphics.DrawString(e.Item.SubItems[e.SubItemIndex].Text,Font,Brushes.Black,rc);

            }

          }

        }

          break;

        case View.LargeIcon:

        {

          SolidBrush sb=new SolidBrush(e.Item.ListView.BackColor);

          e.Graphics.FillRectangle(sb,e.ItemRect);

          e.Graphics.DrawImage(e.Item.ImageList.Images[e.Item.ImageIndex],

            new Rectangle(e.ItemRect.Left+e.ItemRect.Width/2-e.Item.ImageList.ImageSize.Width/2,

            e.ItemRect.Top+2,

            e.Item.ImageList.ImageSize.Width,

            e.Item.ImageList.ImageSize.Height),

            0,0,

            e.Item.ImageList.ImageSize.Width,

            e.Item.ImageList.ImageSize.Height,

            GraphicsUnit.Pixel);

          if(e.Item.Selected)

            e.Graphics.DrawRectangle(Pens.Orange,

              e.ItemRect.Left+e.ItemRect.Width/2-e.Item.ImageList.ImageSize.Width/2,

              e.ItemRect.Top+2,

              e.Item.ImageList.ImageSize.Width,

              e.Item.ImageList.ImageSize.Height);

          Rectangle textrc=new Rectangle(

            e.ItemRect.Left,

            e.ItemRect.Top+2+e.Item.ImageList.ImageSize.Height,

            e.ItemRect.Width,

            e.ItemRect.Height-(2+e.Item.ImageList.ImageSize.Height));

          StringFormat sf=(StringFormat)StringFormat.GenericDefault.Clone();

          sf.Trimming=StringTrimming.EllipsisCharacter;

          sf.Alignment=StringAlignment.Center;

          sb.Color=e.Item.ListView.ForeColor;

          Font selectedFont=new Font("Arial",e.Item.ListView.Font.SizeInPoints,FontStyle.Bold,GraphicsUnit.Point);

          if(e.Item.Selected)

          {

            sb.Color=Color.Green;

            e.Graphics.DrawString(e.Item.Text,selectedFont,sb,textrc,sf);

          }

          else

            e.Graphics.DrawString(e.Item.Text,e.Item.ListView.Font,sb,textrc,sf);

          selectedFont.Dispose();

          sf.Dispose();

          sb.Dispose();

        }

          break;

        case View.SmallIcon:

        {

          SolidBrush sb=new SolidBrush(e.Item.ListView.BackColor);

          e.Graphics.FillRectangle(sb,e.ItemRect);

          e.Graphics.DrawImage(e.Item.ImageList.Images[e.Item.ImageIndex],

            new Rectangle(e.ItemRect.Left,

              e.ItemRect.Top+e.ItemRect.Height/2-e.Item.ImageList.ImageSize.Height/2,

              e.Item.ImageList.ImageSize.Width,

              e.Item.ImageList.ImageSize.Height),

              0,

              0,

              e.Item.ImageList.ImageSize.Width,

              e.Item.ImageList.ImageSize.Height,

              GraphicsUnit.Pixel);

          Rectangle textrc=new Rectangle(

            e.ItemRect.Left+e.Item.ImageList.ImageSize.Width,

            e.ItemRect.Top+2,

            e.ItemRect.Width-e.Item.ImageList.ImageSize.Width,

            e.ItemRect.Height);

          StringFormat sf=(StringFormat)StringFormat.GenericDefault.Clone();

          sf.Trimming=StringTrimming.EllipsisCharacter;

          sf.Alignment=StringAlignment.Near;

          sb.Color=e.Item.ListView.ForeColor;

          Font selectedFont=new Font("Arial",e.Item.ListView.Font.SizeInPoints,FontStyle.Bold,GraphicsUnit.Point);

          if(e.Item.Selected)

          {

            sb.Color=Color.Green;

            e.Graphics.DrawString(e.Item.Text,selectedFont,sb,textrc,sf);

          }

          else

            e.Graphics.DrawString(e.Item.Text,e.Item.ListView.Font,sb,textrc,sf);

          selectedFont.Dispose();

        }

          break;

        case View.List:

          break;

      }

    }

 

Return to the article

Copyright © Bob Powell 2003-2009. All rights reserved