Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控制透明度-C_C#_Winforms - Fatal编程技术网

C# 用户控制透明度-C

C# 用户控制透明度-C,c#,winforms,C#,Winforms,我在表单面板中添加了一个用户控件作为最上面的控件,如下所示: var ct = new UcMessage { Dock = DockStyle.Fill, Location = new Point(0, 0), Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,

我在表单面板中添加了一个用户控件作为最上面的控件,如下所示:

        var ct = new UcMessage {
            Dock = DockStyle.Fill,
            Location = new Point(0, 0),
            Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
            Bounds = this.ClientRectangle,
            Size = this.ClientSize
        };
        this.Controls.Add(ct);
        ct.BringToFront();
它将很好地工作,并将覆盖整个表单。我在用户控件构造函数中使用以下代码设置透明度:

        base.CreateParams.ExStyle |= 0x20;
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        BackColor = Color.FromArgb(0x80, 0xFF, 0xFF, 0xFF);
我的窗体有一个背景图像,在添加用户控件作为最上面的控件后,透明度将起作用,我可以看到窗体的背景图像,但有一个问题,我看不到其他窗体的控件。似乎在添加用户控件后,所有这些都将被隐藏


问题在哪里?如何解决?

尝试删除这行代码: 布林托夫隆


我尝试了你的代码,发现没有那行代码它工作得很好。

如果我删除ct.BringToFront;,然后你可以看到表单的所有控件,你可以和它们交互,这是我不想要的。我希望用户控件覆盖整个表单,您不能与表单的控件交互。只是认为用户控件是一个等待栏。@InsideMan由于用户控件是最上面的,win窗体将不会绘制其他控件。如果您试图在项目上应用安全性,我建议创建一个只读窗体,使用标签将值显示在可写窗体旁边。问题是。在Winforms中,没有真实的透明度,只有伪造的透明度。当且仅当该控件嵌套在另一个控件中时,它才会工作。它在重叠控件之间不起作用。解决方案:基本上没有办法解决这个问题。另外请注意:如果您想要安全性,则无法禁用这些控件,因为用户即使看不到这些控件,也可以对其进行标记。@TaW是的,您可以这样做。可以将其他控件与透明/半透明控件重叠。如图所示:。您可以将该控件拖动到窗体上,并重叠任意数量的其他控件:这些控件都是可见的,并且它们的颜色向半透明控件使用的颜色移动。背景同意这不是真正的透明度,这里没有讨论。@在Man中,您需要覆盖CreateParams,设置WS_EX_TRANSPARENT,并在控件的构造函数中设置适当的样式:SetStyleControlStyles.不透明| ControlStyles.AllPaintingWimPaint | ControlStyles.UserPaint,true;+SetStyleControlStyles.OptimizedDoubleBuffer,false;除非您自己处理BufferedGraphics对象,否则无法将其加倍缓冲。请注意,您的控件/用户控件不再有背景,因此您必须自己绘制,使用带有Alpha的颜色。然后,您可以在半透明控件的曲面上绘制一个透明的PNG。为什么不呢?其性能是否符合预期,质量是否可以接受或良好:。那就去做吧。请注意,Control.DrawToBitmap并不适用于所有控件RichTextBox、ProgressBar等,因此您必须避免使用这些控件。或者,如果需要,请参阅此ControlPrinter类:。它以正确的顺序从ScrollableControls窗体、面板生成位图,并绘制RichTextBox控件的内容。