自分で描いたフォームの枠線や背景色を徐々に明るく(暗く)する方法を中心に紹介します。
1. まずフォームをボーダーレスモードに設定します
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
フォームを右クリックして [プロパティ] を選択し、FormBorderStyler を見つけて [なし] に設定することもできます。このとき、フォーム右上の最小化、最大化、閉じるボタンが消え、マウスでフォームをドラッグする機能も消えます。これらは手順4で追加されます。
2. 境界線を描画します
現在のプロジェクトを選択し、右クリックしてコンポーネントを追加し、コンポーネント クラス Component1 にPanel クラスを継承させ、OnPaint(PaintEventArgs e) をオーバーライドして境界線の色を描画します。ソリューションを生成すると、コンポーネントはツールボックスのコンポーネント列の下に自動的に追加されます。クラス コードは次のとおりです。
public partial class Component1 : Panel { public Component1() { InitializeComponent(); } public Component1(IContainer container) { container.Add(this); InitializeComponent(); } protected override void OnPaint(PaintEventArgs e) { ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.FromArgb(00,59,96), 2, ButtonBorderStyle.Solid, Color.FromArgb(00,59,96), 2, ButtonBorderStyle.Solid, Color.FromArgb(00,59,96), 2, ButtonBorderStyle.Solid, Color.FromArgb(00,59,96), 2, ButtonBorderStyle.Solid); base.OnPaint(e); } }
Color.FromArgb(00,59,96) は境界線の色を設定し、2 は境界線のサイズを設定します。
注: 色を美しく見せるためにどのRGB値を設定すればよいかわからない場合。スクリーン カラー ピッカーをオンラインでダウンロードし、良さそうだと思われる色の RBG 値を読み取ることができます。
3. 境界線を追加します
コンポーネント Component1 をフォームに追加し、その Dock プロパティを Fill に設定します。次に、Padding プロパティを 2、2、2、2 (境界線のサイズに対応) に設定します。コードは次のとおりです:
this.component11.Dock = System.Windows.Forms.DockStyle.Fill; this.component11.Padding = new System.Windows.Forms.Padding(2);
4. フォームの閉じる、最小化、およびマウスのドラッグ関数を追加します。
フォーム コンポーネント this.Component11 に、Panel を追加し、その Dock プロパティを Top に設定します。背景色をカスタマイズします。0、102、171、前景色は透明です。
this.panel1.Dock = System.Windows.Forms.DockStyle.Top; this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(102)))), ((int)(((byte)(171))))); this.panel1.ForeColor = System.Drawing.Color.Transparent;
次に、パネルに 2 つのラベルを追加し、最小化アイコンと最大化アイコンのテキストをそれぞれ __ と X に設定します。フォント設定は Microsoft YaHei、太字、小サイズ 5 です。最後に、MouseDown イベントと MouseMove イベントをパネルに追加します。 Click イベントをラベルに追加し、MouseEnter イベントと MouseLeave イベントを追加して、マウスがアイコン上に移動するとマウスが手の形に変わるようにします。
Point mouseOffSet;private void panel1_MouseDown(object sender, MouseEventArgs e) { mouseOffSet = new Point(-e.X, -e.Y); }private void panel1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePosition = Control.MousePosition; mousePosition.Offset(mouseOffSet.X, mouseOffSet.Y); Location = mousePosition; } }private void labelMinimize_Click(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; }private void labelClose_Click(object sender, EventArgs e) { this.Close(); this.Dispose(); Application.Exit(); }private void labelMinimize_MouseEnter(object sender, EventArgs e) { this.Cursor = Cursors.Hand; }private void labelMinimize_MouseLeave(object sender, EventArgs e) { this.Cursor = Cursors.Default; }private void labelClose_MouseEnter(object sender, EventArgs e) { this.Cursor = Cursors.Hand; }private void labelClose_MouseLeave(object sender, EventArgs e) { this.Cursor = Cursors.Default; }
5. パネルの背景色を徐々にフェードするように設定します
ペイント イベントをパネルに追加します。
private void panel1_Paint(object sender, PaintEventArgs e) { int y, dy; y = this.panel1.ClientRectangle.Location.Y; dy = this.panel1.ClientRectangle.Height / 90; for (int i = 0; i <= 89;i++ ) { Color c = new Color(); //调用Color对象的FromArgb方法 c = Color.FromArgb(50, i + 50, i + 120);//0,102,171 SolidBrush sb = new SolidBrush(c); Pen p = new Pen(sb, 1); //绘制矩形 e.Graphics.DrawRectangle(p, this.panel1.ClientRectangle.X, y, this.Width, y + dy); y = y + dy; //i++; } }
上記は0-自作フォームボーダーからの独習C#01の内容です。その他の関連コンテンツについては、PHP中国語Webサイト(m.sbmmt.com)をご覧ください。