Hai*_*der 7 c# transparency winforms
我想使表单的一部分半透明,在该部分上的附加文本不透明.
我怎样才能在C#中实现这一目标?
我不认为你可以将透明度(更正确地称为" 不透明度")仅应用于表单的一部分而不是完整的整个表单.
但是,您可以非常轻松地创建自定义形状(即非矩形),该形式的各个部分都是透明的.根据您尝试实现的确切"外观",这可能是您最接近的.
看看这些链接,以创建自己的自定义形状:
在.NET中创建自定义形状的Windows窗体
自定义形状的窗体,在Visual Studio .NET 中使用C#形状的Windows窗体和控件下拉
唯一的另一种选择可能是显示两种形式,其中一种形式设置为部分透明.您必须以编程方式确保第二个表单紧邻"主"表单,并在用户移动/调整"主"表单时按比例移动/调整大小.虽然这是两种形式,但可以让用户看到它实际上只有一种形式,虽然这可能非常难以实现,并且不是一个完美的解决方案(但可能"足够好"取决于根据您的确切需求).
您可以通过在表单中创建一个完全透明的窗口,然后在完全透明的窗口上浮动半透明窗体来完成此操作.
首先,将主窗体的TransparencyKey设置为Color.Red,然后panel1
在窗体上放置一个名为Panel的面板,并将其BackColor设置为Red.这将创建完全透明的"窗口".创建一个表单级表单引用,如下所示:
private Form _floater;
Run Code Online (Sandbox Code Playgroud)
接下来,将此代码放在主窗体的Load事件中:
_floater = new Form();
_floater.ShowInTaskbar = false;
_floater.FormBorderStyle = FormBorderStyle.None;
_floater.Opacity = .5;
_floater.Size = panel1.Size;
_floater.StartPosition = FormStartPosition.Manual;
_floater.Location = panel1.PointToScreen(new Point(0, 0));
_floater.Show(this);
Run Code Online (Sandbox Code Playgroud)
最后,将此代码放在主窗体的Move事件中:
_floater.Location = panel1.PointToScreen(new Point(0, 0));
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是,如果用户点击半透明的"窗口",第二个表单将获得焦点,因此您的主表单的TitleBar将显示为灰色.
单击此处以在窗体上使用此半透明窗口运行示例应用程序.