虚位以待(AD)
虚位以待(AD)
首页 > 网络编程 > ASP.NET > 使用重绘项美化WinForm的控件

使用重绘项美化WinForm的控件
类别:ASP.NET   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了如何使用重绘项美化WinForm中控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

如果你觉得项目中的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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • .Net WInform开发笔记(三)谈谈自制控件(自定义控件)
  • c#中多线程访问winform控件的若干问题小结
  • 深入分析C#中WinForm控件之Dock顺序调整的详解
  • WinForm子窗体访问父窗体控件的实现方法
  • C#的winform控件命名规范
  • WinForm自定义函数FindControl实现按名称查找控件
  • 简介Winform中创建用户控件
  • WinForm实现移除控件某个事件的方法
  • C#中让控件全屏显示的实现代码(WinForm)
  • C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法
相关热词搜索: WinForm 美化 控件