2010-05-07 67 views
4

我想要一個窗體中的控件完全可見,但窗體本身是不可見的。如果我更改表單的Opacity,這會使表單和其上的控件半透明,所以這不起作用。如何在保持控件完全可見的情況下使表單透明?

我不能通過設置窗體的TransparencyKey來做到這一點,因爲我在窗體上有一個PictureBox。如果PictureBox中的圖像碰巧包含與TransparencyKey相匹配的像素,則它們在窗體中顯示爲開口,這是我不想要的。

+0

我不知道我明白你在問什麼? – 2010-05-08 00:00:53

+0

C#沒有做UI,框架沒有UI。您使用的是哪個框架(WinForm,WPF,Win32?) – dthorpe 2010-05-08 00:17:04

+1

爲了清晰起見進行了編輯 - 如果這不是您要求的,可隨時回滾我的更改,但我確定它是。我實際上遇到了完全相同的問題,我想知道如何自己做這個。 – MusiGenesis 2010-05-08 00:31:44

回答

2

TransparencyKey是得到此的唯一方法。選擇正確的顏色。 Color.Fuchsia具有成爲選擇顏色的悠久傳統,可追溯到Win32開發的早期階段。用你的眼睛看看它的優點。

2

由於我從來沒有使用它的警告,只是跑過它一次,認爲「整潔!」並繼續...

調查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.VisibleFalse如果沒有加載圖像。
  • 將圖像加載到圖片框中時,分析圖像以獲取其中所有顏色的列表,然後隨機生成一個不是的圖像。設置表格的BackColorTransparencyKey屬性以匹配此新顏色,Hans Passant's答案。
+0

嗨,這不會做我想要的。用戶控制背景仍然具有窗體背景色。例如,如果我使用.png格式圖片的圖片箱,我仍然可以看到表格背景顏色。 – 2010-05-08 13:21:53

相關問題