c# listbox 添加图标和文字
2023-12-27 15:26:41
给listbox 添加?DrawItem 事件
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
int index = e.Index;//获取当前要进行绘制的行的序号,从0开始。
Graphics g = e.Graphics;//获取Graphics对象。
Rectangle bound = e.Bounds;//获取当前要绘制的行的一个矩形范围。
string text = listBox1.Items[index].ToString();//获取当前要绘制的行的显示文本。
g.FillRectangle(new SolidBrush(Color.FromArgb(255, 255, 255)), e.Bounds);//绘制背景色。
Font fn = new Font("宋体", 14);
Image image = Properties.Resources.pengyou; // 从资源管理器中读取图片
int erea = 8;
Rectangle imgRec = new Rectangle(bound.X + erea*2, bound.Y + erea, bound.Height - erea * 2, bound.Height - erea * 2); // 图片区域
Rectangle textRec = new Rectangle(imgRec.Right + 10, bound.Y, bound.Width - imgRec.Right,bound.Height); // 文字区域
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) //如果当前行为选中行。
{
//绘制选中时要显示的蓝色边框。
g.DrawRectangle(Pens.DodgerBlue, bound.Left, bound.Top, bound.Width - 1, bound.Height - 1);
Rectangle rect = new Rectangle(bound.Left + 2, bound.Top + 2, bound.Width - 4, bound.Height - 4);
//绘制选中时要显示的蓝色背景。
g.FillRectangle(Brushes.DodgerBlue, rect);
if (image != null)
{
e.Graphics.DrawImage(image, imgRec, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
}
//绘制显示文本。
TextRenderer.DrawText(g, text, fn, textRec, Color.White, TextFormatFlags.VerticalCenter | TextFormatFlags.Left);
}
else
{
g.DrawRectangle(new Pen(Color.FromArgb(190, 190, 190)), bound.Left - 1, bound.Top, bound.Width + 1, bound.Height);
if (image != null)
{
e.Graphics.DrawImage(image, imgRec, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
}
TextRenderer.DrawText(g, text, fn, textRec, Color.Black, TextFormatFlags.VerticalCenter | TextFormatFlags.Left);
}
}
运行效果
文章来源:https://blog.csdn.net/chen1231985111/article/details/135241271
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!