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#に移行することにした。
ということで、まずは、こんなフォームを丸くするというところからプロトタイプを作成し覚書化。
カレンダって、意外と処理が面倒な部分が多い。まだまだ先は長い。元号が変わる前には完成させたいなぁ。
大変参考になりました。
ありがとうございました。