使用重繪項(xiàng)美化WinForm的控件
如果你覺得項(xiàng)目中的ComboBox、ListBox或其它的Winforms控件不能滿足你的顯示要求,包括窗體在內(nèi)很多控件都支持重繪修改顯示樣式。下面的示例完成對(duì)ComBox數(shù)據(jù)項(xiàng)的重繪,希望能起到拋磚引玉的作用。

顯示源代碼
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();
//指定繪制模式,這項(xiàng)必須指定為,OwnerDrawFixed,OwnerDrawVariable
//Normal 由操作系統(tǒng)繪制,并且元素大小都相等。
//OwnerDrawFixed 手動(dòng)繪制的,并且元素大小都相等。
//OwnerDrawVariable 手動(dòng)繪制,元素大小可能不相等。
comboBox2.DrawMode = DrawMode.OwnerDrawFixed;
}
//重繪項(xiàng)事件
private void comboBox2_DrawItem(object sender, DrawItemEventArgs e)
{
//獲取要在其上繪制項(xiàng)的圖形表面
Graphics g = e.Graphics;
//獲取表示所繪制項(xiàng)的邊界的矩形
System.Drawing.Rectangle rect = e.Bounds;
//定義要繪制到控件中的圖標(biāo)圖像
Image ico = Image.FromFile("head.png");
//定義字體對(duì)象
System.Drawing.Font font = new System.Drawing.Font(new FontFamily("宋體"), 12);
if (e.Index >= 0)
{
//獲得當(dāng)前Item的文本
string tempString = comboBox2.Items[e.Index].ToString();
//如果當(dāng)前項(xiàng)是沒有狀態(tài)的普通項(xiàng)
if (e.State == DrawItemState.None)
{
//在當(dāng)前項(xiàng)圖形表面上劃一個(gè)矩形
g.FillRectangle(new SolidBrush(Color.FromArgb(200, 230, 255)), rect);
//在當(dāng)前項(xiàng)圖形表面上劃上圖標(biāo)
g.DrawImage(ico, new Point(rect.Left, rect.Top));
//在當(dāng)前項(xiàng)圖形表面上劃上當(dāng)前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();
}
}
}
}
}
總結(jié):如果僅僅是美化可以選擇使用皮膚控件,但使用重繪更加靈活,可以滿足一些功能上的需求。另外不同的控件還有一些不同重繪事件,可以參照MSDN。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#日期控件datetimepicker保存空值的三種方法
- winform dateTime數(shù)據(jù)類型轉(zhuǎn)換方法
- c# Winform自定義控件-儀表盤功能
- Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果
- WinForm IP地址輸入框控件實(shí)現(xiàn)
- WinForm實(shí)現(xiàn)鼠標(biāo)拖動(dòng)控件跟隨效果
- winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件
- C# winform自定義翻頁控件詳解
- C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例
- Winform控件SaveFileDialog用于保存文件
- C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼
- C# WinForm-Timer控件的使用
相關(guān)文章
判斷WebBrowser瀏覽器網(wǎng)頁加載完成的處理方法
.net 中通過 SqlConnection 連接 sql server,我們會(huì)發(fā)現(xiàn)第一次連接時(shí)總是很耗時(shí),但后面連接就很快,這個(gè)其實(shí)和SqlConnection 的連接池機(jī)制有關(guān),正確的理解這個(gè)連接池機(jī)制,有助于我們編寫高效的數(shù)據(jù)庫應(yīng)用程序。2013-04-04
使用 Salt + Hash 將密碼加密后再存儲(chǔ)進(jìn)數(shù)據(jù)庫
如果你需要保存密碼(比如網(wǎng)站用戶的密碼),你要考慮如何保護(hù)這些密碼數(shù)據(jù),象下面那樣直接將密碼寫入數(shù)據(jù)庫中是極不安全的,因?yàn)槿魏慰梢源蜷_數(shù)據(jù)庫的人,都將可以直接看到這些密碼2012-12-12
ASP.NET從字符串中查找字符出現(xiàn)次數(shù)的具體實(shí)現(xiàn)方法
今天在一場“特殊的討論”中引入了一個(gè)問題,如何在C#求出字符串中某字符的出現(xiàn)次數(shù),比如求“ADSFGEHERGASDF”中“A”出現(xiàn)的次數(shù)2013-11-11

