Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使窗体的一部分在C#中部分透明?_C#_Winforms_Transparency - Fatal编程技术网

如何使窗体的一部分在C#中部分透明?

如何使窗体的一部分在C#中部分透明?,c#,winforms,transparency,C#,Winforms,Transparency,我想使表单的一部分半透明,并在该部分上添加不透明的文本 如何在C#中实现这一点?我不确定在WinForms中,如果不过度使用p/invoke调用和解决方法,这是否可行 您可能希望使用Windows演示基金会(WPF),而这样的效果几乎是微不足道的。 简单: myForm.Opacity = 80; // Change 80 with your value 我认为你不能将透明度(更准确地说,不透明性)仅应用于表单的一部分,而不能应用于整个表单 但是,您可以非常轻松地创建自定义形状的表单(即非矩形

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


如何在C#中实现这一点?

我不确定在WinForms中,如果不过度使用p/invoke调用和解决方法,这是否可行

您可能希望使用Windows演示基金会(WPF),而这样的效果几乎是微不足道的。

简单:

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

我认为你不能将透明度(更准确地说,不透明性)仅应用于表单的一部分,而不能应用于整个表单

但是,您可以非常轻松地创建自定义形状的表单(即非矩形),该表单的各个部分都是透明的。根据你想要达到的确切“外观”,这可能是你最接近的

查看以下链接,以创建您自己的自定义形状表单:




唯一的其他选择可能是显示两个表单,其中一个设置为部分透明。您必须以编程方式确保第二个窗体紧靠“主”窗体,并且在用户移动/调整“主”窗体时按比例移动/调整大小。虽然这是两个表单,但可以让用户看到它实际上只是一个表单,尽管这可能很难实现,并且不是一个完美的解决方案(但可能“足够好”,具体取决于您的具体需求)。

您可以通过在表单中创建一个完全透明的窗口来实现这一点,然后在完全透明的窗口上浮动半透明窗体

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

private Form _floater;
接下来,将此代码放入主窗体的加载事件中:

_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);
最后,将此代码放在主窗体的移动事件中:

_floater.Location = panel1.PointToScreen(new Point(0, 0));
这里唯一的问题是,如果用户单击半透明的“窗口”,第二个窗体将获得焦点,因此主窗体的标题栏将变灰


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

@FBSC-这将更改整个窗体的不透明度。听起来,最初的提问者只想更改表单一部分的不透明度,而不是整个表单。对不起,我跳过了“部分”:SWhy-1?我的答案怎么了?在WinForms中,您只能在完整表单上设置透明度,而不能在表单的各个部分设置透明度,因此我怀疑这是否容易做到。+1可以抵消否决票。在WinForms中实现这一点并不难,但它有点粗糙,WPF更适合于这类事情(尽管当MS工程师为您做所有事情时就没那么有趣了)。