2015/1/1

【C#】製作不規則形狀的控制元件,以按鈕為例

Custom Button, Irregularly shaped control
製作一個不規則的控制元件(Non-rectangular Controls)相對不規則視窗較為複雜一點,但也只是要自己多敲一些代碼而已,在示範中會運用GraphicsPath類別與控制元件的Paint事件來製作一對鬥雞眼按鈕:
  1. 首先在Form中加入一個按鈕(Button)元件,在此把該按鈕命名為CustomButton,並把Text顯示文字清空(清空文字只是為了讓外觀較為乾淨,若有需要可以設定要顯示的文字內容),按鈕大小設定為100x50
  2. 幫此按鈕註冊Paint事件,在此事件中運用GraphicsPath生成一個物件並設定欲顯示圖樣路徑,最將此物件指定給按鈕的Region屬性即可。
    private void CustomButton_Paint(object sender, PaintEventArgs e)
    {
        System.Drawing.Drawing2D.GraphicsPath myGraphicsPath = new System.Drawing.Drawing2D.GraphicsPath();
        myGraphicsPath.AddEllipse(new Rectangle(0, 0, 50, 50));
        myGraphicsPath.AddEllipse(new Rectangle(30, 35, 10, 10));
        myGraphicsPath.AddEllipse(new Rectangle(50, 0, 50, 50));
        myGraphicsPath.AddEllipse(new Rectangle(60, 35, 10, 10));
        CustomButton.BackColor = Color.Brown;
        CustomButton.FlatStyle = FlatStyle.Flat;
        CustomButton.FlatAppearance.BorderSize = 0;
        CustomButton.Region = new Region(myGraphicsPath);
    }
    
補充:

  1. GraphicsPath內建多種預設圖形,如:圓形、舉行、三角形,甚至是文字等,因此可以輕易透過疊加方式繪出各種客製化的形狀。
  2. 在GraphicsPath中的圖形疊加具有互斥或的效果,意思是如果兩個圖案有重疊到的區域會呈現挖空效果,但如果又有第三張圖片重疊上去,則三張圖片重疊的區域會被顯示。

1 則留言:

  1. 補充一下,避免按鈕不斷重畫可以避免影響其他控制元件的顯示:)

    回覆刪除