使用重绘项美化WinForm的控件
Windows  /  管理员 发布于 4年前   197
如果你觉得项目中的ComboBox、ListBox或其它的Winforms控件不能满足你的显示要求,包括窗体在内很多控件都支持重绘修改显示样式。下面的示例完成对ComBox数据项的重绘,希望能起到抛砖引玉的作用。
显示源代码
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace SimpleDemo{ public partial class frmDrawItem : Form { public frmDrawItem() { InitializeComponent(); //指定绘制模式,这项必须指定为,OwnerDrawFixed,OwnerDrawVariable //Normal 由操作系统绘制,并且元素大小都相等。 //OwnerDrawFixed 手动绘制的,并且元素大小都相等。 //OwnerDrawVariable 手动绘制,元素大小可能不相等。 comboBox2.DrawMode = DrawMode.OwnerDrawFixed; } //重绘项事件 private void comboBox2_DrawItem(object sender, DrawItemEventArgs e) { //获取要在其上绘制项的图形表面 Graphics g = e.Graphics; //获取表示所绘制项的边界的矩形 System.Drawing.Rectangle rect = e.Bounds; //定义要绘制到控件中的图标图像 Image ico = Image.FromFile("head.png"); //定义字体对象 System.Drawing.Font font = new System.Drawing.Font(new FontFamily("宋体"), 12); if (e.Index >= 0) { //获得当前Item的文本 string tempString = comboBox2.Items[e.Index].ToString(); //如果当前项是没有状态的普通项 if (e.State == DrawItemState.None) { //在当前项图形表面上划一个矩形 g.FillRectangle(new SolidBrush(Color.FromArgb(200, 230, 255)), rect); //在当前项图形表面上划上图标 g.DrawImage(ico, new Point(rect.Left, rect.Top)); //在当前项图形表面上划上当前Item的文本 g.DrawString(tempString, font, new SolidBrush(Color.Black), rect.Left + ico.Size.Width, rect.Top); //将绘制聚焦框 e.DrawFocusRectangle(); } else { e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), rect); g.DrawImage(ico, new Point(rect.Left, rect.Top)); g.DrawString(tempString, font, new SolidBrush(Color.Black), rect.Left + ico.Size.Width, rect.Top); e.DrawFocusRectangle(); } } } }}
总结:如果仅仅是美化可以选择使用皮肤控件,但使用重绘更加灵活,可以满足一些功能上的需求。另外不同的控件还有一些不同重绘事件,可以参照MSDN。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号