Tag:开源控件 , 源码下载 , 控件开发 , 控件美化 , 窗体换肤 , Skin , QQ表情 , Windows API , GDI+编程 , SQLite , Socket , 控件透明 , 下拉控件 , HTML 解析器 , 图片水印 , ScrollBar(滚动条) , Google Sitemap , 数据库 , SQL , WinForm , P/Invoke , ListBox , Control , 控件

 
您的位置: >> 首页 >> C# 视角 >> C# WinForm控件美化扩展系列之ListBox

C# WinForm控件美化扩展系列之ListBox

2009-07-26  来自:CS 程序员之窗  字体大小:【  
  • 摘要:.NET中DataGridView 控件可以每个数据行显示不同的背景颜色,方便用户查看,而ListBox却没有实现这样的显示,这篇文章我们就要介绍怎样让ListBox实现隔行显示交替的背景色。

.NETDataGridView 控件可以每个数据行显示不同的背景颜色,方便用户查看,而ListBox却没有实现这样的显示,这篇文章我们就要介绍怎样让ListBox实现隔行显示交替的背景色。

要实现ListBox隔行显示不同的背景色并不是很难,下面我们就一步步的来实现:

1、  继承 ListBox,设置其DrawMode OwnerDrawFixed,看下代码:

public ListBoxEx()

                      : base()

                 {

                       base.DrawMode = DrawMode.OwnerDrawFixed;

}

2、  给继承的控件添加3个属性:RowBackColor1RowBackColor2SelectedColor,这三个颜色分别是数据项的交替的背景色和数据项选择后的背景色。

3、  重写控件的OnDrawItem函数,当数据项的索引为奇数时,用RowBackColor1绘制背景,为偶数时用 RowBackColor2绘制背景,数据项当选中时,用SelectedColor绘制背景,然后绘制项的文本,如果有焦点的话就绘制聚焦框。看看具体代码:

protected override void OnDrawItem(DrawItemEventArgs e)

        {

            base.OnDrawItem(e);

            if (e.Index != -1)

            {

                if ((e.State & DrawItemState.Selected)

                    == DrawItemState.Selected)

                {

                    RenderBackgroundInternal(

                        e.Graphics,

                        e.Bounds,

                        _selectedColor,

                        _selectedColor,

                        Color.FromArgb(200, 255, 255, 255),

                        0.45f,

                        true,

                        LinearGradientMode.Vertical);

                }

                else

                {

                    Color backColor;

                    if (e.Index % 2 == 0)

                    {

                        backColor = _rowBackColor2;

                    }

                    else

                    {

                        backColor = _rowBackColor1;

                    }

                    using (SolidBrush brush = new SolidBrush(backColor))

                    {

                        e.Graphics.FillRectangle(brush, e.Bounds);

                    }

                }

 

                string text = Items[e.Index].ToString();

                TextFormatFlags formatFlags = TextFormatFlags.VerticalCenter;

                if (RightToLeft == RightToLeft.Yes)

                {

                    formatFlags |= TextFormatFlags.RightToLeft;

                }

                else

                {

                    formatFlags |= TextFormatFlags.Left;

                }

                TextRenderer.DrawText(

                    e.Graphics,

                    text,

                    Font,

                    e.Bounds,

                    ForeColor,

                    formatFlags);

 

                if ((e.State & DrawItemState.Focus) ==

                    DrawItemState.Focus)

                {

                    e.DrawFocusRectangle();

                }

            }
        }

这样,隔行数据项显示交替的背景色的 ListBox控件就完成了,看看效果:

 

声明:

本文版权归作者和CS 程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者:Starts_2000

出处:http://www.csharpwin.com CS 程序员之窗

你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看:

CS程序员之窗开源协议http://www.csharpwin.com/csol.html)。