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

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

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

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

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

查看这些链接以创建自定义形状的表单:

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

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

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

首先,将主窗体的TransparencyKey设置为Color.Red,然后在窗体上放置一个名为panel1的面板,并将其BackColor设置为Red。 这将创建完全透明的“窗口”。 创建一个表单级表单引用,如下所示:

 private Form _floater; 

接下来,将此代码放在主窗体的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); 

最后,将此代码放在主窗体的Move事件中:

 _floater.Location = panel1.PointToScreen(new Point(0, 0)); 

这里唯一的问题是,如果用户点击半透明的“窗口”,第二个表单将获得焦点,因此您的主表单的TitleBar显示为灰色。

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

我不确定WinForms是否可以在没有充分利用p / invoke调用和变通方法的情况下实现这一点。

您可能希望使用Windows Presentation Foundation(WPF),这样的效果几乎无法实现。

简单:

 myForm.Opacity = 80; // Change 80 with your value