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控件的内容。