Windows Form的屬性設定裡並無法直接設定成圓邊,如果需要在FormBoderStyle為none的狀態下讓Form以圓邊的狀態下顯示,如下圖:
只需要把Form的可視範圍畫出成圓邊的路徑就可以了,其它元件也可以那麼做,只是當元件被重畫時,需要重新Repaint圓邊的範圍。
GraphicsPath graphicpath = new GraphicsPath();
graphicpath.StartFigure();
graphicpath.AddArc(0, 0, 25, 25, 180, 90);
graphicpath.AddLine(25, 0, this.Width - 25, 0);
graphicpath.AddArc(this.Width - 25, 0, 25, 25, 270, 90);
graphicpath.AddLine(this.Width, 25, this.Width, this.Height - 25);
graphicpath.AddArc(this.Width - 25, this.Height - 25, 25, 25, 0, 90);
graphicpath.AddLine(this.Width - 25, this.Height, 25, this.Height);
graphicpath.AddArc(0, this.Height - 25, 25, 25, 90, 90);
graphicpath.CloseFigure();
this.Region = new Region(graphicpath);
如果需要內圓邊則可利用背景圖畫出內圓邊範圍,再設定BackgroundImageLayout為Stretch,則會自動縮成跟Form一樣大小。
如果縮放Form可以看到圓邊也跟著重畫,而內圓也會自動縮成合適的大小,如下圖:
原始碼:
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;
using System.Drawing.Drawing2D;
namespace EdgeRounding
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
RePaint();
}
protected void RePaint()
{
GraphicsPath graphicpath = new GraphicsPath();
graphicpath.StartFigure();
graphicpath.AddArc(0, 0, 25, 25, 180, 90);
graphicpath.AddLine(25, 0, this.Width - 25, 0);
graphicpath.AddArc(this.Width - 25, 0, 25, 25, 270, 90);
graphicpath.AddLine(this.Width, 25, this.Width, this.Height - 25);
graphicpath.AddArc(this.Width - 25, this.Height - 25, 25, 25, 0, 90);
graphicpath.AddLine(this.Width - 25, this.Height, 25, this.Height);
graphicpath.AddArc(0, this.Height - 25, 25, 25, 90, 90);
graphicpath.CloseFigure();
this.Region = new Region(graphicpath);
}
private Point startPoint;
// Saves the resize origin
private void resizeBox_MouseDown(object sender, MouseEventArgs e)
{
startPoint = new Point(-e.X + this.pictureBox1.Width, -e.Y + this.pictureBox1.Height);
}
// Resizes the form
private void resizeBox_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(startPoint.X, startPoint.Y);
Size = new Size(mousePos.X - Location.X, mousePos.Y - Location.Y);
//重畫圓邊
RePaint();
}
}
//移動畫面
private void Form_MouseDown(object sender, MouseEventArgs e)
{
startPoint = new Point(-MousePosition.X + Location.X, -MousePosition.Y + Location.Y);
}
//移動畫面
private void Form_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(startPoint.X, startPoint.Y);
Location = mousePos;
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
this.Dispose();
}
}
}
下載點:
Dear 筆者,
我叫Andre,我是艾鍗學院的教務人員。
近來我一直在找尋Android講師,希望可以找到合適的講師人選,
在看過您所撰寫的文章後,希望能有機會與您認識。
Andre