[C#] フォームの角を丸くする方法

C#で、Windowsフォームの角を丸くして表示する方法。
 

普通のWindowsフォームは、タイトルバーとか境界線が付き、角も角ばっている。
角ばったWindowsフォーム

 

それを、こんな感じに角を丸くして表示する。
フォームの角を丸くする

 

覚書ということで、いきなりソースコード。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // フォームの境界線、タイトルバーを無しに設定
            this.FormBorderStyle = FormBorderStyle.None;

            // フォームの背景を黒に設定
            this.BackColor = Color.Black;

            // フォームの不透明度を60%に設定(半透明化)
            this.Opacity = 0.6;

            int radius = 20;
            int diameter = radius * 2;
            System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();

            // 左上
            gp.AddPie(0, 0, diameter, diameter, 180, 90);
            // 右上
            gp.AddPie(this.Width - diameter, 0, diameter, diameter, 270, 90);
            // 左下
            gp.AddPie(0, this.Height - diameter, diameter, diameter, 90, 90);
            // 右下
            gp.AddPie(this.Width - diameter, this.Height - diameter, diameter, diameter, 0, 90);
            // 中央
            gp.AddRectangle(new Rectangle(radius, 0, this.Width - diameter, this.Height));
            // 左
            gp.AddRectangle(new Rectangle(0, radius, radius, this.Height - diameter));
            // 右
            gp.AddRectangle(new Rectangle(this.Width - radius, radius, radius, this.Height - diameter));

            this.Region = new Region(gp);
        }
    }
}

 
 

実行すると、こんな感じ。
C# フィームの角を丸くする

 

寂しいので、26行目でフォームを黒色化し、29行目で半透明化。

これ、タイトルバーも消してしまったので、[×]ボタンも無く閉じられない。
ので、Visual Studio側で停止ボタンを押すか、[Alt]+[F4]などで閉じて頂戴。

 
 

余談:
自作ソフト「プチカレンダ」がVB6で作られていて、開発環境も古くいつかC#に移行しなければとずっと思っていた。
でも、かなりソースが肥大化してしまったので、移行を躊躇していた。

もう保守しないという手段もあるけど、自分好みのカレンダソフトがイマイチないので、やっぱり作るしかない。
丁度、2019年に元号が平成から変わるとか、祝日も今後、ちょいちょい変更もありそうだし、これを機にC#に移行することにした。

ということで、まずは、こんなフォームを丸くするというところからプロトタイプを作成し覚書化。
カレンダって、意外と処理が面倒な部分が多い。まだまだ先は長い。元号が変わる前には完成させたいなぁ。

 
 


Tagged:

Leave a comment

メールアドレスが公開されることはありません。

CAPTCHA


*