1. 程式人生 > >解決winfrom下TextBox不支援透明背景色

解決winfrom下TextBox不支援透明背景色

不知道微軟扯什麼拉雞蛋子,居然有控制元件不支援透明,我實在想噴設計的人腦殘。尤其可恨的是TextBox不支援,更可恨的是直到最新版.net4.6也不支援。原始碼又看不見,具體實現細節都不知道,誰能改得動?這也難怪C#會被java大軍淹沒。不是C#不好,是很多細節沒到位。

解決方案一:

重寫一個TextBox:

public class TransTextBox : TextBox
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr LoadLibrary(string lpFileName);

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams prams = base.CreateParams;
            if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
            {
                prams.ExStyle |= 0x020; 
                prams.ClassName = "RICHEDIT50W";
            }
            return prams;
        }
    }
}

為什麼可以,我不知道,我只是程式碼的搬運工。然而,這個方案是有所缺陷的。

如果你是大神,可以自己定義出一個全新的TextBox。然後以下就是兩種開源的透明的TextBox控制元件:

需要賬號才能下載。可以用github授權登陸。

解決方案二:

AlphaBlendTextBox - A transparent/translucent textbox for .NET:

解決方案三:

Alpha Blended (Transparent Capable) TextBox and RichTextBox:

最後就是,看清楚,看清楚是winfrom,不是別的。網上那什麼:

this.SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);

或者直接設定:

base.BackColor = Color.Transparent;

臥槽,尼們測試過嗎》》》瞎扯得蛋疼。

還有利用form透明來設定的,那麼多年了,程式碼在哪裡?一個實現都沒有。也是瞎搞,不實際的方案。

——end