blavince's BLOG

Giving is a reward in itself.

0%

Winform UI 客製化(三) - 資源檔

透過資源檔將外部的圖案引入, 讓設計 UI 時更多元.

前言

除了 Winform UI 客製化(二) - 分頁 方方角角的 panel 排版外, 也可以讓邊緣帶有導角, 甚至設計成圓形! 引入外部的圖案讓 UI 更順眼.

本文

  1. panel 導角
  2. 資源檔
  3. 使用

1. panel 導角

加入 using:

1
using System.Runtime.InteropServices;

引用 .dll,

1
2
3
4
5
6
7
8
9
10
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);

2. 資源檔

  1. 新增資源檔
    對解決方案點擊滑鼠右鍵: 加入(D)新增項目(W)資源檔新增(A), 新增 Resource1.resx.
  2. 新增圖檔
    點擊 Resource1.resx 後, 加入資源檔(R)加入現有檔案(E) → 選擇rbt.png → 開啟(O).

3. 使用

在UserControl1.cs 加入 panel1 、 panel2 及 pictureBox1 層疊,

然後在 UserControl1_Load 加入:

1
2
3
4
5
6
7
8
private void UserControl1_Load(object sender, EventArgs e)
{
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
pictureBox1.Image = WindowsFormsApp1.Resource1.rbt;

panel1.Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, panel1.Width, panel1.Height, 220, 220));
panel2.Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, panel2.Width, panel2.Height, 200, 200));
}

點擊 偵錯(D)開始偵錯(G), 編譯完成後運行如下圖: