首先,我們先來實現主界面的扁平化 此處分為兩個步驟,第一步是更改winform自帶的MainForm窗體屬性,第二步是添加窗體事件。 將主窗體FormBorderStyle更改為None,這樣就得到了一個無邊框的窗體(winform自帶邊框太醜。。) 調節背景色,建議找到自己喜歡的顏色,然後使用取色 ...
首先,我們先來實現主界面的扁平化
此處分為兩個步驟,第一步是更改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; //新添此句,添加新的控制項MyProgressBar
private 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;
}
完成之後就可以啦,看看最後的效果:
理解控制項重繪或者是重寫的含義之後,其他的控制項也非常方便拓展與修改,達到美化效果!