首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >透明richTextBox

透明richTextBox
EN

Stack Overflow用户
提问于 2011-02-06 06:11:55
回答 4查看 17.1K关注 0票数 7

如何使我的富文本框变得透明

我想要这个,因为我想把一个文本放在一个图形图像的顶部(这是我的表单的背景)。

这就是为什么我希望richTextBox是透明的,

我在windows窗体应用程序中使用.NET、c#和

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-06 08:21:12

在WinForms控件中没有真正的透明性。透明模式继承其父模式的默认背景。我过去解决这个问题的方法是使用OnPaint事件,然后使用Graphics.DrawString方法将文本定位到我想要的位置。

票数 5
EN

Stack Overflow用户

发布于 2013-11-02 03:22:04

我知道这个答案来得太晚了,但我希望它能帮助那些想要一种简单的方法来完成这项工作的人。

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

代码语言:javascript
复制
public partial class CustomRTB : UserControl

至:

代码语言:javascript
复制
public partial class CustomRTB : RichTextBox

当您打开设计文件时,这将导致一个错误,所以只需转到Designer.cs文件并删除/注释显示错误的行(将有错误的行将不超过两行)。接下来,将以下内容添加到分部类中:

代码语言:javascript
复制
protected override CreateParams CreateParams
{
    get
    {
        //This makes the control's background transparent
        CreateParams CP = base.CreateParams;
        CP.ExStyle |= 0x20;
        return CP;
    }
}

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

代码语言:javascript
复制
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 (是的,它是一个面板,它将是半透明的,其不透明度可以通过编程方式控制)。现在打开分部类并将其修改为:

代码语言:javascript
复制
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属性来控制其不透明度:

代码语言:javascript
复制
translucentPanel1.BackColor = Color.FromArgb(50, 0, 0, 0);

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

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

票数 7
EN

Stack Overflow用户

发布于 2011-02-06 08:05:47

你试过了吗?http://www.codeproject.com/KB/edit/AlphaBlendedTextControls.aspx?artkw=richTextBox%20to%20be%20transparent

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4910036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档