C#で、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);
}
}
}
寂しいので、26行目でフォームを黒色化し、29行目で半透明化。
これ、タイトルバーも消してしまったので、[×]ボタンも無く閉じられない。
ので、Visual Studio側で停止ボタンを押すか、[Alt]+[F4]などで閉じて頂戴。
余談:
自作ソフト「プチカレンダ」がVB6で作られていて、開発環境も古くいつかC#に移行しなければとずっと思っていた。
でも、かなりソースが肥大化してしまったので、移行を躊躇していた。
もう保守しないという手段もあるけど、自分好みのカレンダソフトがイマイチないので、やっぱり作るしかない。
丁度、2019年に元号が平成から変わるとか、祝日も今後、ちょいちょい変更もありそうだし、これを機にC#に移行することにした。
ということで、まずは、こんなフォームを丸くするというところからプロトタイプを作成し覚書化。
カレンダって、意外と処理が面倒な部分が多い。まだまだ先は長い。元号が変わる前には完成させたいなぁ。









大変参考になりました。
ありがとうございました。