首页 > 解决方案 > C# Windows10 | TransparencyKey 不适用于子表单

问题描述

子窗口允许从 Windows 8 WS_EX_LAYERED 窗口样式开始。

我正在尝试使用 Form.TransparencyKey 创建一个具有透明背景的表单,该表单将是另一个窗口的子窗口。为了清楚起见,我现在尝试制作这样的对象树:Form(Form1)->Panel(pnlVideo)->Form(frmOverlay)。

代码:

   public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
            Test1();
        }
        public void Test1()
        {
            // create form with transparent background
            Form frmOverlay = new Form();
            frmOverlay.TopLevel = false;
            frmOverlay.Parent = pnlVideo;

            frmOverlay.Text = "Overlay";
            frmOverlay.Top = 0;
            frmOverlay.Left = 0;
            frmOverlay.Width = pnlVideo.Width / 2;
            frmOverlay.Height = pnlVideo.Height;
            frmOverlay.BackColor = Color.Black;
            frmOverlay.FormBorderStyle = FormBorderStyle.None;
            frmOverlay.ShowInTaskbar = false;
            frmOverlay.ControlBox = false;

            Label label1 = new Label();
            label1.Parent = frmOverlay;

            label1.BackColor = frmOverlay.BackColor;
            label1.AutoSize = true;
            label1.Top = 0;
            label1.Left = 0;
            label1.Text = "TRANSPARENT LABEL\r\nSecond line\r\nThird line";
            label1.ForeColor = Color.Blue;

            frmOverlay.TransparencyKey = frmOverlay.BackColor;
            frmOverlay.Show();
     }
}

此代码运行良好,但 frmOverlay 没有透明背景 - 它只是黑色(屏幕截图)。通过 Spy64 查看窗口样式,我可以看到 ExStyle 不包含 WS_EX_LAYERED 样式。

我在 Windows 10 上运行它,所以我想它应该可以工作。如果我离开 frmOverlay 顶层并且没有父级,那么 TransparencyKey 会按预期工作。

我哪里错了?

标签: c#

解决方案


推荐阅读