listbox隔行显示不同颜色
2014-01-17 13:44
393 查看
要实现这个效果很简单,只需自定义一个类继承ListBox,然后重写OnDrawItem事件就可以了,下面看代码
class CListbox:ListBox
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
protected override void OnDrawItem(DrawItemEventArgs e)
{
Graphics g = e.Graphics;
if (e.Index % 2 == 0)
{
g.FillRectangle(new SolidBrush(Color.WhiteSmoke), e.Bounds);
g.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(Color.Blue), e.Bounds);
}
else
{
g.FillRectangle(new SolidBrush(Color.WhiteSmoke), e.Bounds);
g.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(Color.Red), e.Bounds);
}
e.DrawFocusRectangle();
g.Dispose();
base.OnDrawItem(e);
}
//捕获消息,画listbox边框
protected override void WndProc(ref Message m)
{
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
System.Drawing.Pen pen = new Pen(Color.YellowGreen, 1);
System.Drawing.Graphics g = Graphics.FromHdc(hDC);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawRectangle(pen, 0, 0, this.Width - 1, this.Height - 1);
pen.Dispose();
g.Dispose();
ReleaseDC(m.HWnd, hDC);
}
base.WndProc(ref m);
}
}
应用如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private CListbox mylistbox;
private void Form1_Load(object sender, EventArgs e)
{
mylistbox = new CListbox();
mylistbox.ItemHeight = 32;
mylistbox.DrawMode = DrawMode.OwnerDrawVariable;
mylistbox.Height = 150;
mylistbox.Width = 250;
mylistbox.Items.Add("第一行显示!");
mylistbox.Items.Add("第二行显示!");
mylistbox.Items.Add("第三行显示!");
mylistbox.Items.Add("第四行显示!");
mylistbox.Items.Add("第五行显示!");
mylistbox.Items.Add("第六行显示!");
mylistbox.Items.Add("第七行显示!");
mylistbox.Items.Add("第八行显示!");
mylistbox.Items.Add("第九行显示!");
mylistbox.Items.Add("第十行显示!");
mylistbox.Items.Add("第十一行显示!");
mylistbox.Items.Add("第十二行显示!");
this.Controls.Add(mylistbox);
}
}
效果如下:
class CListbox:ListBox
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
protected override void OnDrawItem(DrawItemEventArgs e)
{
Graphics g = e.Graphics;
if (e.Index % 2 == 0)
{
g.FillRectangle(new SolidBrush(Color.WhiteSmoke), e.Bounds);
g.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(Color.Blue), e.Bounds);
}
else
{
g.FillRectangle(new SolidBrush(Color.WhiteSmoke), e.Bounds);
g.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(Color.Red), e.Bounds);
}
e.DrawFocusRectangle();
g.Dispose();
base.OnDrawItem(e);
}
//捕获消息,画listbox边框
protected override void WndProc(ref Message m)
{
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
System.Drawing.Pen pen = new Pen(Color.YellowGreen, 1);
System.Drawing.Graphics g = Graphics.FromHdc(hDC);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawRectangle(pen, 0, 0, this.Width - 1, this.Height - 1);
pen.Dispose();
g.Dispose();
ReleaseDC(m.HWnd, hDC);
}
base.WndProc(ref m);
}
}
应用如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private CListbox mylistbox;
private void Form1_Load(object sender, EventArgs e)
{
mylistbox = new CListbox();
mylistbox.ItemHeight = 32;
mylistbox.DrawMode = DrawMode.OwnerDrawVariable;
mylistbox.Height = 150;
mylistbox.Width = 250;
mylistbox.Items.Add("第一行显示!");
mylistbox.Items.Add("第二行显示!");
mylistbox.Items.Add("第三行显示!");
mylistbox.Items.Add("第四行显示!");
mylistbox.Items.Add("第五行显示!");
mylistbox.Items.Add("第六行显示!");
mylistbox.Items.Add("第七行显示!");
mylistbox.Items.Add("第八行显示!");
mylistbox.Items.Add("第九行显示!");
mylistbox.Items.Add("第十行显示!");
mylistbox.Items.Add("第十一行显示!");
mylistbox.Items.Add("第十二行显示!");
this.Controls.Add(mylistbox);
}
}
效果如下:
相关文章推荐
- Gridview某一列根据不同的条件显示不同颜色的实现(原创)
- iOS 一个控件内字符显示不同的字体,大小和颜色
- textView 文字显示不同颜色
- iOS在label中显示不同颜色的字
- wpf listView实现Grid,并且奇偶行显示不同颜色
- excel中如何设置下拉框,并且不同值显示不同颜色
- textview中显示不同颜色的字体与显示图片
- 不同颜色背景交替显示
- winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色
- ios开发同一个lab显示不同的颜色
- label中显示不同颜色的字以及不同字体,字体高亮
- iOS利用NSAttributeString实现不同颜色大小显示的方法
- DataGrid鼠标到达的行和列显示不同的颜色
- iOS 在UILabel显示不同的字体和颜色
- Linux下printf函数显示不同的颜色(转)
- 用JS实现表格中隔行显示不同颜色
- iOS 在UILabel显示不同的字体和颜色
- 使用TextKit自定义UILabel,使用正则匹配链接(不同颜色显示)等,提高Label性能(Xcode 8.2.1 (8C1002) swift3最新语法)
- 汇编——在屏幕中间显示不同颜色的字符串
- android中TextView同一行显示不同颜色文字