在 EyesBaby 專案的休息提醒視窗中,需於動態圖片 (GIF) 上顯示倒數秒數。直接在 PictureBox 上放置 Label 會因背景遮蓋導致陰影,影響視覺整合度。本文介紹兩種實現文字與圖片完美融合的方案。
pictureBox1.SendToBack();
// 設定 Label 背景為透明
lblMsg.BackColor = Color.Transparent;
// 關鍵:將 Label 父容器指定為 PictureBox
lblMsg.Parent = pictureBox1;
// 確保 Label 置於最上層
lblMsg.BringToFront();
優點:支援動態圖片 (GIF) 播放期間文字同步更新;缺點:若 PictureBox 尺寸變動需手動調整 Label 位置。
pictureBox1.CreateGraphics().DrawString(
lblMsg.Text,
lblMsg.Font,
new SolidBrush(lblMsg.ForeColor),
lblMsg.Left - pictureBox1.Left,
lblMsg.Top - pictureBox1.Top);
優點:文字與圖片合為一體,無層級管理問題;缺點:不適用動態圖片,因 GIF 每幀重繪會清除已繪文字,導致閃爍或消失。
EyesBaby 休息視窗使用動態 GIF,故採用 方案一。若為靜態圖片背景,方案二效能更佳且程式碼更簡潔。