WinForms 中直接將 Label.BackColor = Color.Transparent **並非真透明**,僅繼承父容器背景色,重疊時會遮擋底層圖片。本文提供兩種 **無需寫代碼、設計器即時可見** 的真透明方案。
將 Label 放在 PictureBox 上,設 BackColor=Transparent,運行時發現 Label 底色為 Form 背景色而非 PictureBox 圖片,重疊區域無法透出底圖。
BackgroundImage 為目標圖片,BackgroundImageLayout 視需求設定。BackColor = Transparent。原理:Panel 繪製背景圖,Label 繼承 Panel 的客戶區背景 (即圖片),實現像素級透明。設計器即時顯示效果。
label1.Parent = pictureBox1;BackColor = Transparent。關鍵:Control.Parent 屬性決定渲染時的背景來源。設為 PictureBox 後,Label 直接在 PictureBox 表面繪製,透明色即為圖片像素。設計器中拖動 Label 進入 PictureBox 區域時會自動變更 Parent,或手動指派。
| 方案 | 優點 | 缺點 | 適用 |
|---|---|---|---|
| Panel 容器 | 佈局靈活、可含多控件、支援 BackgroundImageLayout | 額外容器層級 | 複雜背景佈局、多控件疊加 |
| Label.Parent = PictureBox | 最直接、零額外控件、效能略優 | Label 必須在 PictureBox 矩形區域內 | 單圖片上疊加文字/圖示 |
BackColor = Transparent 且 Form 啟用 TransparencyKey,或改用 WPF / 自繪控件。label1.UseCompatibleTextRendering = true (GDI+) 可獲得更佳邊緣。兩種方案均為 **純設計器操作、零運行時代碼**,極大簡化 WinForms 透明 UI 開發。