1. 程式人生 > >使控制元件產生透明背景(不同於MSDN的方法)

使控制元件產生透明背景(不同於MSDN的方法)

今天搞了一天終於搞定

是這樣的,我寫了一個自定義的控制元件然後設定為背景透明,然後用Control.Add()方法新增到一個已有的控制元件,2個以內沒問題,當超過兩個後就會提示建立控制代碼錯誤,鬱悶到死,怎麼搞就是搞不好,MSDN提供的方法如下:

  1. 定位控制元件類的建構函式。

  2. 在建構函式中呼叫窗體的 SetStyle

    Visual Basic 複製程式碼
    SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    C# 複製程式碼
    SetStyle(ControlStyles.SupportsTransparentBackColor, true
    );
    J# 複製程式碼
    SetStyle(ControlStyles.SupportsTransparentBackColor, true);

    這將使控制元件能夠支援透明背景色。

  3. 在步驟 1 中新增的程式碼行下再新增下面的程式碼行。這會將控制元件的 BackColor 設定為 Transparent

    Visual Basic 複製程式碼
    Me.BackColor = Color.Transparent
    C# 複製程式碼
    this.BackColor = Color.Transparent;
    J# 複製程式碼
    this.set_BackColor(Color.get_Transparent());

    注意,也可以通過使用 FromArgb 方法建立半透明顏色。有關顏色的更多資訊,請參見 使用託管圖形類

    但是這是無濟於事的,因為當我動態新增超過3個這樣的自定義控制元件後就會報建立控制代碼錯誤。鬱悶

終於有幸在網上看到一篇文章

其SetStyle函式裡面的引數要這樣設定才行:

            SetStyle(ControlStyles.SupportsTransparentBackColor
                | ControlStyles.UserPaint
                | ControlStyles.AllPaintingInWmPaint
                | ControlStyles.Opaque, true);
            BackColor = Color.Transparent;

目前暫不知道為什麼要這樣設定

希望對您有用,多謝閱讀!