【问题标题】:WinForms draw a non transparent string into a transparent formWinForms 将非透明字符串绘制成透明表单
【发布时间】:2025-12-20 14:25:11
【问题描述】:

我正在构建一个应用程序,我必须在其中显示一个半透明的表单。我还需要在该表单上绘制一些文本,让用户知道一些信息。 但是,我画的字符串也是半透明的,很难阅读。我想知道是否有办法将非透明字符串绘制成半透明形式。 我正在使用 .NET 4.0、C# 和 WinForms 技术。 目前我在 Graphics 表单上使用 DrawString 方法,但使用 Label 完全没有效果。 浏览 * 我发现了这个 How do I make my form transparent, but what I draw on it not? 但它指的是 WPF,我使用的是普通的旧 WinForms。

干杯。

【问题讨论】:

  • 您可以有一个部分不透明的窗口,使文本也像您发现的那样不透明,或者使用 TransparencyKey 属性具有非透明文本的完全透明窗口。如果你想要两者,那么你需要两者的三明治。两个窗口相互重叠。显示带有 Show(owner) 重载的第二个窗口。
  • 你能粘贴你用来使表单半透明的代码吗?
  • 为了使表单半透明,我只需将 opacity 属性设置为 10%
  • 这个article可能会有所帮助吗?

标签: c# .net winforms


【解决方案1】:

这可能会对您有所帮助 - 它会给您一个带有非透明文本的完全透明的表单:

在初始化组件中:

SetStyle(ControlStyles.SupportsTransparentBackColor, true);
TransparencyKey = BackColor;
ShowInTaskbar = false;
FormBorderStyle = FormBorderStyle.None;

在 OnPaint 覆盖中:

g.DrawString(...) // Use some SolidBrush.

但是,如果您不想要完全透明的表单(这听起来不太好,但应该可以),那么您可以使用 两种 表单:一种具有半透明背景,没有文字。另一个(在前一个之上)具有完全透明的背景和不透明的文本。您可以将一个表单的位置、大小和可见性绑定到另一个表单以保持同步。

【讨论】:

  • 是的,这是我在有人评论原始帖子时采用的方法。谢谢老兄。