文本框控件不支持透明的背景色


.NET環境下TextBox和RichTextBox是不支持透明背景色的。當我們在屬性設計器中將它們的BackColor設置為Transparent時,會彈出一個警告窗口“屬性值無效:控件不支持透明的背景色”。

在網上一搜,有很多解決辦法:

(1)在代碼中加入以下代碼:textBox1.BackColor = System.Drawing.Color.Transparent;

(2)通過繼承TextBox進行簡單設置樣式ControlStyles.SupportsTransparentBackColor。

public class MyTextBox : TextBox
{
public MyTextBox()
{
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
}

(3)如果不想自己做控件,提供一個比較喪心病狂的思路:

1. 創建一個窗體,無邊框,TrancsparencyKey設置為跟TextBox一樣;
2. 窗體上放一個TextBox,Dock屬性設置為fill;
3. 在主窗體上放置一個Label,設置成透明;
4. 鼠標點擊Label時,將自己做的窗體show出來,並且將label隱藏;
5. 焦點離開TextBox時,將TextBox的內容復制給Label。關閉無框窗體,顯示label;
6. 其他細節就自己琢磨吧,比如鼠標外觀啦,Tab鍵控制焦點移動啦之類。

 

分析:

方法(1):不可行。雖然編譯能過,但會遇到運行時錯誤。因為WinForm不支持該控件的透明背景色。

方法(2):不可行。雖然通過設置樣式SupportsTransparentBackColor為真之后能夠使文本框的背景色

設置為Transparent,但是卻達不到透明效果,背景色仍然不是透明的。

方法(3):可行但卻復雜。不是最佳方案,只能說是如果沒有其他方案的情況下才使用該方法。

 

總結

由於.NET框架本身對文本框控件背景色的支持不太好,所以必須使用一些更底層的WIN32函數才能解決。下面是從The Code Project上找到的一些好的實現方式,基本上都是使用底層WIN32函數解決的,具體的代碼剖析留到后面有時間再做,現在可以直接方便的使用就行。

這有一篇專門講怎么使文本框背景透明的文章:How to make a TextBox/RichTextBox transparent

 

開源控件

AlphaBlendTextBox - A transparent/translucent textbox for .NET

 

 

Alpha Blended (Transparent Capable) TextBox and RichTextBox

 

 

 

另外:

C#中button透明,無邊線框,但是點擊透明部分能實現它的功能~~~· 謝謝

最佳答案
答:按鈕的FlatStyle屬性改成Flat.
加一個button1.BackColor=Color.Transparent;
(或者加this.button1.FlatStyle=FlatStyle.Flat;button1.BackColor=Color.Transparent;
2010-12-23 11:57 dedtfo | 六級
是Web的話就用ImageButton;是WinForm的話用pictureBox之后加onclick事件,我試過可以。用button的話,在無邊框的狀態下也能看的出一點點。當然用圖片的話完全可以用透明的圖片,你可以用PS導出,我試了完全可以。希望對您有一點點幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM