web-dev-qa-db-ja.com

C#で境界線が丸いフォーム?

このコードを使用して、フォームに境界線のスタイルを持たせています。

this.FormBorderStyle = FormBorderStyle.None;

フォームに丸みを帯びたエッジを作成する必要があります。

簡単な方法はありますか?どうすればいいのですか?

11
Hunter Mitchell

これを見てください: http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.region.aspx

FormクラスはControlクラスを継承しているため、FormのRegionプロパティへのリンクにあるのと同じサンプルを実行してみてください(そして、もちろんフォームイベント):

    // This method will change the square button to a circular button by 
// creating a new circle-shaped GraphicsPath object and setting it 
// to the RoundButton objects region.
private void roundButton_Paint(object sender, 
    System.Windows.Forms.PaintEventArgs e)
{

    System.Drawing.Drawing2D.GraphicsPath buttonPath = 
        new System.Drawing.Drawing2D.GraphicsPath();

    // Set a new rectangle to the same size as the button's 
    // ClientRectangle property.
    System.Drawing.Rectangle newRectangle = roundButton.ClientRectangle;

    // Decrease the size of the rectangle.
    newRectangle.Inflate(-10, -10);

    // Draw the button's border.
    e.Graphics.DrawEllipse(System.Drawing.Pens.Black, newRectangle);

    // Increase the size of the rectangle to include the border.
    newRectangle.Inflate( 1,  1);

    // Create a circle within the new rectangle.
    buttonPath.AddEllipse(newRectangle);

    // Set the button's Region property to the newly created 
    // circle region.
    roundButton.Region = new System.Drawing.Region(buttonPath);

}
2
eyossi

私は質問がすでに回答されていることを知っています、私は代替の愚かな方法を追加したいと思いますが、あなたの質問は回答をコードに制限しないので、実際には推奨されない方法です...

  • 背景色を塗りつぶした空白の正方形の画像を作成し、左上の丸い角を消去して透明にします。これをすべての角に繰り返します。
  • フォームの背景色として非常にありそうもない色を設定します
  • この色をフォームのTransparencyKeyとして設定します
  • 画像をPictureBoxとして追加し、対応するコーナーに配置します

ビオラ!

1
TweakBox
    public static void RoundBorderForm(Form frm)
    {

        Rectangle Bounds = new Rectangle(0, 0, frm.Width, frm.Height);
        int CornerRadius = 20;
        System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
        path.AddArc(Bounds.X, Bounds.Y, CornerRadius, CornerRadius, 180, 90);
        path.AddArc(Bounds.X + Bounds.Width - CornerRadius, Bounds.Y, CornerRadius, CornerRadius, 270, 90);
        path.AddArc(Bounds.X + Bounds.Width - CornerRadius, Bounds.Y + Bounds.Height - CornerRadius, CornerRadius, CornerRadius, 0, 90);
        path.AddArc(Bounds.X, Bounds.Y + Bounds.Height - CornerRadius, CornerRadius, CornerRadius, 90, 90);
        path.CloseAllFigures();

        frm.Region = new Region(path);
        frm.Show();
    }
0
Milad Akbary