首先,我們先來實作主界面的扁平化
此處分為兩個步驟,第一步是更改winform自帶的MainForm表單屬性,第二步是添加表單事件,
- 將主表單FormBorderStyle更改為None,這樣就得到了一個無邊框的表單(winform自帶邊框太丑,,)
- 調節背景色,建議找到自己喜歡的顏色,然后使用取色器(我用的是按鍵精靈自帶的取色板)取得想要的RGB引數,輸入到BackColor屬性之中
- 在主表單的Mouse_Down中添加如下事件,實作表單隨意拖動:
[DllImport("user32.dll")]public static extern bool ReleaseCapture();[DllImport("user32.dll")][DllImport("user32.dll")]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);public const int WM_SYSCOMMAND = 0x0112;public const int SC_MOVE = 0xF010;public const int HTCAPTION = 0x0002;/// <summary>/// 為了是主界面能夠移動/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void MainForm_MouseDown(object sender, MouseEventArgs e){ ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);} - 添加最小化、退出事件的按鈕,背景色BackColor和字體色Forecolor設定為與界面顏色較為搭配的,將按鈕的FlatStyle設定為Popup,它會自己隨著界面風格調整哦~~最小化和退出的代碼如下:
this.WindowState = FormWindowState.Minimized;this.Close();到此為止主表單的美化以及基本功能實作完畢
表單基本控制元件實作美化
tabcontrol美化
通過tabcontrol的drawitem事件,來達到改變tabpage字體、字體顏色以及背景色的目的
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) { SolidBrush back = new SolidBrush(Color.FromArgb(45, 45, 48)); SolidBrush white = new SolidBrush(Color.FromArgb(122, 193, 255)); Rectangle rec = tabControl1.GetTabRect(0); e.Graphics.FillRectangle(back, rec); Rectangle rec1 = tabControl1.GetTabRect(1); e.Graphics.FillRectangle(back, rec1); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; for (int i = 0; i < tabControl1.TabPages.Count; i++) { Rectangle rec2 = tabControl1.GetTabRect(i); e.Graphics.DrawString(tabControl1.TabPages[i].Text, new Font("微軟雅黑", 9), white, rec2, sf); } }DataGridview美化
- 通過設定ColumnHeadersDefaultCellStyle,來改變列標題的背景、字體和顏色
- 通過設定DefaultCellStyle,來改變單元格背景、字體和顏色
- 通過設定RowHeadersDefaultCellStyle,來改變行標題的背景、字體和顏色
ProgressBar美化
很多人反映winform的進度條設定BackColor和ForeColor屬性,不會產生效果,進度條顏色不會變,因為進度條ProgressBar由于是虛擬模式下運行的,所以調整BackColor和ForeColor都不會產生效果,它仍然會根據windows的主題來更改,為了使其按照我們想要的顏色來顯示,我們可以將虛擬模式的命令去掉,在program.cs中,注釋掉如下內容:
using System;using System.Windows.Forms;namespace 界面美化{ static class Program { [STAThread] static void Main() { //Application.EnableVisualStyles();//此行為允許虛擬模式運行的命令,我們把它注釋掉 Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }}但是這樣的話會導致其他控制元件形狀或者風格發生一些改變,個人不推薦上述方案,更加推薦通過重寫ProgressBar的OnePaint方法來改變它的顏色(前景色和背景色),在此我們有如下代碼
using System.Windows.Forms;using System.Drawing;namespace 界面美化{ class MyProgressBar:ProgressBar //新建一個MyProgressBar類,它繼承了ProgressBar的所有屬性與方法 { public MyProgressBar() { base.SetStyle(ControlStyles.UserPaint, true);//使控制元件可由用戶自由重繪 } protected override void OnPaint(PaintEventArgs e) { SolidBrush brush = null; Rectangle bounds = new Rectangle(0, 0, base.Width, base.Height); e.Graphics.FillRectangle(new SolidBrush(this.BackColor), 1, 1, bounds.Width - 2, bounds.Height - 2);//此處完成背景重繪,并且按照屬性中的BackColor設定背景色 bounds.Height -= 4; bounds.Width = ((int)(bounds.Width * (((double)base.Value) / ((double)base.Maximum)))) - 4;//是的進度條跟著ProgressBar.Value值變化 brush = new SolidBrush(this.ForeColor); e.Graphics.FillRectangle(brush, 2, 2, bounds.Width, bounds.Height);//此處完成前景重繪,依舊按照Progressbar的屬性設定前景色 } }}完成以上步驟之后,我們如何在界面中插入自己的進度條呢?``我們可以先插入一個winform自帶的ProgressBar,調整好位置,ForeColor,BackColor屬性,然后進入表單的Designer程式中做如下修改:
//private System.Windows.Forms.ProgressBar progressBar1;//注釋此句private MyProgressBar progressBar1; //新添此句,添加新的控制元件MyProgressBarprivate void InitializeComponent(){ //this.progressBar1 = new System.Windows.Forms.ProgressBar();//注釋此句 this.progressBar1 = new 界面美化.MyProgressBar();//新添此句,此處對MyPorgressBar實體化 this.SuspendLayout(); this.progressBar1.Location = new System.Drawing.Point(137, 68); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(100, 23); this.progressBar1.TabIndex = 0;} 完成之后就可以啦,看看最后的效果:
理解控制元件重繪或者是重寫的含義之后,其他的控制元件也非常方便拓展與修改,達到美化效果!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/3535.html
標籤:WinForm
