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

时间:2009-10-11 10:33:32

标签: c# winforms transparency

我希望将表单的一部分设为半透明,并在该部分上添加不透明的文本。

如何在C#中完成此操作?

4 个答案:

答案 0 :(得分:7)

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

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

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

Creating Custom Shaped Windows Forms in .NET
Custom shaped form with a drop down in C#
Shaped Windows Forms and Controls in Visual Studio .NET

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

答案 1 :(得分:5)

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

首先,将主窗体的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将变灰。

Click here在表单上使用此半透明窗口运行示例应用程序。

答案 2 :(得分:0)

我不确定WinForms是否可以在没有使用p / invoke调用和变通方法的情况下使用它。

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

答案 3 :(得分:0)

简单:

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