ahm*_*ori 7 .net c# richtextbox winforms
如何让我的richtext框透明
我想要这个因为我试图将文本放在图形图像(这是我的表单的背景)之上.
这就是为什么我希望richTextBox透明,
我使用.NET,c#和windows窗体应用程序
我知道这个答案很晚,但我希望能帮助其他想要轻松完成任务的人.
首先,在项目中创建一个新的用户控件并为其命名,比如CustomRTB.cs.完成后,打开分部类并更改:
public partial class CustomRTB : UserControl
Run Code Online (Sandbox Code Playgroud)
至:
public partial class CustomRTB : RichTextBox
Run Code Online (Sandbox Code Playgroud)
这将在您打开Design文件时导致错误,因此只需转到Designer.cs文件并删除/注释显示错误的行(不会有超过两行有错误).接下来,将以下内容添加到分部类:
protected override CreateParams CreateParams
{
get
{
//This makes the control's background transparent
CreateParams CP = base.CreateParams;
CP.ExStyle |= 0x20;
return CP;
}
}
Run Code Online (Sandbox Code Playgroud)
这个类现在应该是这样的:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在构建您的解决方案,您将能够在表单中使用该控件.此控件将完全透明,您将无法调整透明度.通过更改此代码中的第一行,您还可以创建除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;
}
}
Run Code Online (Sandbox Code Playgroud)
只需注释掉引发它的Designer.cs文件中的行,就必须处理构建项目时出现的错误.完成后,再次构建项目,半透明面板将像以前一样出现在工具箱中.使用此面板作为透明richtextbox的父控件,即将面板放在表单上并将RTB放在其中.您还可以将BorderStyle属性设置为None,以从UI中删除任何RTB跟踪.
您还可以通过在程序中使用其BackColor属性来控制半透明面板的不透明度:
translucentPanel1.BackColor = Color.FromArgb(50, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
更改上面传递的参数将允许您控制面板的不透明度和颜色.
此解决方法不仅可以解决透明RTB的光标和滚动问题,还可以解决您创建的任何其他透明控件的问题.
在WinForms控件中没有真正的透明度.透明模式继承其父级的默认背景.我过去解决它OnPaint的Graphics.DrawString方法是使用该事件,然后使用该方法将文本定位在我想要的位置.