WinForm 窗體圓角實現


找了很多資料最后找到了, 表示感謝  為了擴散, 決定復制一份並加上自己嘗試的一些方法……

圓角窗體參考地址: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……我選擇上面的那種方法……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM