我想要一個窗體中的控件完全可見,但窗體本身是不可見的。如果我更改表單的Opacity
,這會使表單和其上的控件半透明,所以這不起作用。如何在保持控件完全可見的情況下使表單透明?
我不能通過設置窗體的TransparencyKey
來做到這一點,因爲我在窗體上有一個PictureBox
。如果PictureBox中的圖像碰巧包含與TransparencyKey
相匹配的像素,則它們在窗體中顯示爲開口,這是我不想要的。
我想要一個窗體中的控件完全可見,但窗體本身是不可見的。如果我更改表單的Opacity
,這會使表單和其上的控件半透明,所以這不起作用。如何在保持控件完全可見的情況下使表單透明?
我不能通過設置窗體的TransparencyKey
來做到這一點,因爲我在窗體上有一個PictureBox
。如果PictureBox中的圖像碰巧包含與TransparencyKey
相匹配的像素,則它們在窗體中顯示爲開口,這是我不想要的。
TransparencyKey是得到此的唯一方法。選擇正確的顏色。 Color.Fuchsia具有成爲選擇顏色的悠久傳統,可追溯到Win32開發的早期階段。用你的眼睛看看它的優點。
由於我從來沒有使用它的警告,只是跑過它一次,認爲「整潔!」並繼續...
調查System.Drawing.Drawing2D.GraphicsPath並設置窗體的Region
屬性。我在基本Windows窗體應用程序中添加了兩個按鈕:
public Form1()
{
InitializeComponent();
Rectangle r1 = new Rectangle(button1.Location, button1.Size);
Rectangle r2 = new Rectangle(button2.Location, button2.Size);
GraphicsPath gp = new GraphicsPath();
gp.AddRectangle(r1);
gp.AddRectangle(r2);
this.Region = new Region(gp);
}
我用矩形近似了按鈕的形狀;使用此代碼,您可以在按鈕的角落看到窗體背景顏色。您需要爲每個控件制定封閉路徑,並將它們分別添加到路徑中。您需要考慮表單標題欄或邊框樣式引入的任何偏移量。
更新:我做了一些調查,並有一對夫婦對這個問題的可能辦法:
GraphicsPath
方法,設置pictureBox.Visible
到False
如果沒有加載圖像。BackColor
和TransparencyKey
屬性以匹配此新顏色,Hans Passant's答案。嗨,這不會做我想要的。用戶控制背景仍然具有窗體背景色。例如,如果我使用.png格式圖片的圖片箱,我仍然可以看到表格背景顏色。 – 2010-05-08 13:21:53
我不知道我明白你在問什麼? – 2010-05-08 00:00:53
C#沒有做UI,框架沒有UI。您使用的是哪個框架(WinForm,WPF,Win32?) – dthorpe 2010-05-08 00:17:04
爲了清晰起見進行了編輯 - 如果這不是您要求的,可隨時回滾我的更改,但我確定它是。我實際上遇到了完全相同的問題,我想知道如何自己做這個。 – MusiGenesis 2010-05-08 00:31:44