使用重繪項(xiàng)美化WinForm的控件
如果你覺(jué)得項(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)是沒(méi)有狀態(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。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#日期控件datetimepicker保存空值的三種方法
- winform dateTime數(shù)據(jù)類型轉(zhuǎn)換方法
- c# Winform自定義控件-儀表盤(pán)功能
- 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自定義翻頁(yè)控件詳解
- C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例
- Winform控件SaveFileDialog用于保存文件
- C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼
- C# WinForm-Timer控件的使用
相關(guān)文章
asp.net創(chuàng)建XML文件的方法小結(jié)
這篇文章主要介紹了asp.net創(chuàng)建XML文件的方法,結(jié)合實(shí)例形式總結(jié)分析了asp.net創(chuàng)建XML文件的原理,步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04.Net Core路由處理的知識(shí)點(diǎn)與方法總結(jié)
這篇文章主要給大家介紹了關(guān)于.Net Core路由處理的知識(shí)點(diǎn)與方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04C#實(shí)現(xiàn)上傳照片到物理路徑,并且將地址保存到數(shù)據(jù)庫(kù)的小例子
這篇文章主要介紹了c#上傳圖片,并將地址保存到數(shù)據(jù)庫(kù)中的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-12-12ASP.NET連接sql2008數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了ASP.NET連接sql2008數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-01-01ASP.NET數(shù)組刪除重復(fù)值實(shí)現(xiàn)代碼
在ASP.NET編程中,要想刪除數(shù)組的重復(fù)值可以使用多種方法代碼實(shí)現(xiàn)相同的效果。今天,在某個(gè)博客中看到某功能代碼中的一小段代碼很不錯(cuò),它就是用來(lái)移動(dòng)數(shù)組中相同值的方法,分享給大家2015-10-10.Net?ORM?訪問(wèn)?Firebird?數(shù)據(jù)庫(kù)的方法
這篇文章簡(jiǎn)單介紹了在?.net6.0?環(huán)境中使用?FreeSql?對(duì)?Firebird?數(shù)據(jù)庫(kù)的訪問(wèn),目前?FreeSql?還支持.net?framework?4.0?和?xamarin?平臺(tái)上使用,對(duì).Net?ORM?訪問(wèn)?Firebird?數(shù)據(jù)庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-07-07