资源描述:
《介绍怎样扩展ListView控件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、介绍怎样扩展ListView控件,使他也具有这样的功能,而且重绘他的Header,使其更美观。在这篇文章中,我只对View为Details的时候进行了重绘,至于其他的Ttile,List,SmallIcon,LargeIcon,大家可以照着代码自己实现。这个控件的美化大致跟ListBox的差不了多少,我们还是一步一步的来实现它吧:1、 继承ListView,并把OwnerDraw设为True,如下:publicListViewEx():base(){base.OwnerDraw=true;}2、 给继承的控件添加4个属性:RowBackColor1,RowBa
2、ckColor2,SelectedColor,HeadColor这三个颜色分别是数据项的交替的背景色、数据项选择后的背景色和列表头的背景颜色。3、 重绘Header,通过重写OnDrawColumnHeader函数来实现。protectedoverridevoidOnDrawColumnHeader(DrawListViewColumnHeaderEventArgse){base.OnDrawColumnHeader(e); Graphicsg=e.Graphics;Rectanglebounds=e.Bounds; ColorbaseColor=_headC
3、olor;ColorborderColor=_headColor;ColorinnerBorderColor=Color.FromArgb(200,255,255); RenderBackgroundInternal(g,bounds,baseColor,borderColor,innerBorderColor,0.35f,true,LinearGradientMode.Vertical); TextFormatFlagsflags=GetFormatFlags(e.Header.TextAlign);RectangletextRect=newRectangl
4、e(bounds.X+3,bounds.Y,bounds.Width-6,bounds.Height);; if(e.Header.ImageList!=null){Imageimage=e.Header.ImageIndex==-1?null:e.Header.ImageList.Images[e.Header.ImageIndex];if(image!=null){RectangleimageRect=newRectangle(bounds.X+3,bounds.Y+2,bounds.Height-4,bounds.Height-4);g.Interpol
5、ationMode=InterpolationMode.HighQualityBilinear;g.DrawImage(image,imageRect); textRect.X=imageRect.Right+3;textRect.Width-=imageRect.Width;}}TextRenderer.DrawText(g,e.Header.Text,e.Font,textRect,e.ForeColor,flags);}4、 重绘Item,通过重写OnDrawItem,OnDrawSubItem来实现,这里我只对Details这种显示模式进行了重写。pr
6、otectedoverridevoidOnDrawItem(DrawListViewItemEventArgse){base.OnDrawItem(e);if(View!=View.Details){e.DrawDefault=true;}} protectedoverridevoidOnDrawSubItem(DrawListViewSubItemEventArgse){base.OnDrawSubItem(e);if(View!=View.Details){return;}if(e.ItemIndex==-1){return;}Rectanglebound
7、s=e.Bounds;ListViewItemStatesitemState=e.ItemState;Graphicsg=e.Graphics;if((itemState&ListViewItemStates.Selected)==ListViewItemStates.Selected){bounds.Height--;ColorbaseColor=_selectedColor;ColorborderColor=_selectedColor;ColorinnerBorderColor=Color.FromArgb(200,255,255); RenderBac
8、kgroundInternal(g,b