如何在C#中使表单的一部分部分透明?

Hai*_*der 7 c# transparency winforms

我想使表单的一部分半透明,在该部分上的附加文本不透明.

我怎样才能在C#中实现这一目标?

Cra*_*gTP 7

我不认为你可以将透明度(更正确地称为" 不透明度")仅应用于表单的一部分而不是完整的整个表单.

但是,您可以非常轻松地创建自定义形状(即非矩形),该形式的各个部分都是透明的.根据您尝试实现的确切"外观",这可能是您最接近的.

看看这些链接,以创建自己的自定义形状:

在.NET中创建自定义形状的Windows窗体
自定义形状的窗体,在Visual Studio .NET 中使用C#形状的Windows窗体和控件下拉

唯一的另一种选择可能是显示两种形式,其中一种形式设置为部分透明.您必须以编程方式确保第二个表单紧邻"主"表单,并在用户移动/调整"主"表单时按比例移动/调整大小.虽然这是两种形式,但可以让用户看到它实际上只有一种形式,虽然这可能非常难以实现,并且不是一个完美的解决方案(但可能"足够好"取决于根据您的确切需求).


Mus*_*sis 5

您可以通过在表单中​​创建一个完全透明的窗口,然后在完全透明的窗口上浮动半透明窗体来完成此操作.

首先,将主窗体的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将显示为灰色.

单击此处以在窗体上使用此半透明窗口运行示例应用程序.