透明的richTextBox

如何使我的richtext框变得透明
我想要这个因为我试图在图形图像上放置一个文本(这是我的表单的背景)。

这就是为什么我希望richTextBox透明,
我正在使用.NET,c#和Windows窗体应用程序

在WinForms控件中没有真正的透明度。 透明模式inheritance其父级的默认背景。 我过去解决它的方法是使用OnPaint事件,然后使用Graphics.DrawString方法将文本定位在我想要的位置。

我知道这个答案很晚,但我希望它能帮助其他想要轻松完成任务的人。

首先,在项目中创建一个新的用户控件并为其命名,比如CustomRTB.cs。 完成后,打开部分类并更改:

 public partial class CustomRTB : UserControl 

至:

 public partial class CustomRTB : RichTextBox 

这将在您打开Design文件时导致错误,因此只需转到Designer.cs文件并删除/注释显示错误的行(不会有两行有错误)。 接下来,将以下内容添加到分部类:

 protected override CreateParams CreateParams { get { //This makes the control's background transparent CreateParams CP = base.CreateParams; CP.ExStyle |= 0x20; return CP; } } 

这个类现在应该是这样的:

 public partial class CustomRTB : RichTextBox { public CustomRTB() { InitializeComponent(); } protected override CreateParams CreateParams { get { //This makes the control's background transparent CreateParams CP = base.CreateParams; CP.ExStyle |= 0x20; return CP; } } } 

现在构建您的解决方案,您将能够在表单中使用该控件。 此控件将完全透明,您将无法调整透明度。 通过更改此代码中的第一行,您还可以创建除richtextbox之外的其他透明控件。 希望这可以帮助 :)

编辑:

上述控件的问题在于它只能用于以编程方式显示文本,因为在运行或调试应用程序时编辑是有问题的(正如@nevelis在下面的注释中解释的那样)。 但是,有一个简单的解决方法:

首先,在项目中创建另一个用户控件并将其命名为TranslucentPanel.cs(是的,它是一个面板,它将是半透明的,其不透明度可以通过编程方式控制)。 现在打开分部类并将其修改为:

 public partial class TranslucentPanel : Panel { public TranslucentPanel() { InitializeComponent(); SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true); BackColor = Color.Transparent; } } 

只需注释掉引发它的Designer.cs文件中的行,就必须处理构建项目时出现的错误。 完成后,再次构建项目,半透明面板将像以前一样出现在工具箱中。 使用此面板作为透明richtextbox的父控件,即将面板放在表单上并将RTB放在其中。 您还可以将BorderStyle属性设置为None,以从UI中删除任何RTB跟踪。

您还可以通过在程序中使用其BackColor属性来控制半透明面板的不透明度:

 translucentPanel1.BackColor = Color.FromArgb(50, 0, 0, 0); 

更改上面传递的参数将允许您控制面板的不透明度和颜色。

此解决方法不仅解决了透明RTB的光标和滚动问题,还解决了您创建的任何其他透明控件的问题。

没有办法让Windows窗体控件具有透明背景。 许多人以前尝试过,但都失败了。 有些人想出了异国情调的黑客,但他们都失败了一些细节。 如果您需要比旧Windows窗体可提供的更高级的渲染function,请使用WPF或HTML。