找了很多資料最后找到了, 表示感謝 為了擴散, 決定復制一份並加上自己嘗試的一些方法……
圓角窗體參考地址:https://blog.csdn.net/lllljz/article/details/7561811
主要是region這個屬性, 可以設置窗體的區域
/// <summary> /// 設置窗體的Region /// </summary> public void SetWindowRegion() { GraphicsPath FormPath; Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); FormPath = GetRoundedRectPath(rect, 50); this.Region = new Region(FormPath); } /// <summary> /// 繪制圓角路徑 /// </summary> /// <param name="rect"></param> /// <param name="radius"></param> /// <returns></returns> private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) { int diameter = radius; Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter)); GraphicsPath path = new GraphicsPath(); // 左上角 path.AddArc(arcRect, 180, 90); // 右上角 arcRect.X = rect.Right - diameter; path.AddArc(arcRect, 270, 90); // 右下角 arcRect.Y = rect.Bottom - diameter; path.AddArc(arcRect, 0, 90); // 左下角 arcRect.X = rect.Left; path.AddArc(arcRect, 90, 90); path.CloseFigure();//閉合曲線 return path; } /// <summary> /// 窗體size發生改變時重新設置Region屬性 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Resize(object sender, EventArgs e) { SetWindowRegion(); }
效果圖:
下面說一下我做的嘗試:
問UI搞了一張圖圓角、 png格式
使用代碼將窗體透明
public Form1() { InitializeComponent(); this.BackColor = ColorTranslator.FromHtml("#F7F1F1"); this.TransparencyKey = ColorTranslator.FromHtml("#F7F1F1"); this.label1.BackColor = Color.White; this.Opacity = 1; }
這里的transparencykey屬性可以把所有改顏色變成透明 並且捕獲不到鼠標事件, 然后將png的圖片設置為背景圖, 或者用e.graphes.drawimage()方法將圖片放上去。
這個時候會有一個問題, 就是如果png圖片的周圍有一圈透明色, 則會將backcolor的顏色顯示出來效果就是這樣:
至今沒找到解決辦法。UI說png的圖必須要有一圈透明的圓角模板, so……我選擇上面的那種方法……