Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Winforms_Richtextbox - Fatal编程技术网

C# 透明文本框

C# 透明文本框,c#,.net,winforms,richtextbox,C#,.net,Winforms,Richtextbox,如何使richtext box透明 我想要这个,因为我正试图把一个文本放在一个图形图像(这是我的表单的背景)的顶部 这就是为什么我希望richTextBox是透明的, 我使用的是.NET、c#和windows窗体应用程序,无法使windows窗体控件具有透明的背景。许多人曾经尝试过,但都失败了。有些人想出了异国情调的黑客,但在某些细节上都失败了。如果您需要比旧Windows窗体提供的更高级的呈现功能,请使用WPF或HTML。您尝试过吗? WinForms控件中没有真正的透明性。透明模式继承其父模

如何使richtext box透明
我想要这个,因为我正试图把一个文本放在一个图形图像(这是我的表单的背景)的顶部

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

我使用的是.NET、c#和windows窗体应用程序

,无法使windows窗体控件具有透明的背景。许多人曾经尝试过,但都失败了。有些人想出了异国情调的黑客,但在某些细节上都失败了。如果您需要比旧Windows窗体提供的更高级的呈现功能,请使用WPF或HTML。

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

我知道这个答案已经很晚了,但我希望它能帮助其他希望以简单方式完成此任务的人

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

public partial class CustomRTB : UserControl
致:

这将在打开设计文件时导致错误,因此只需转到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的光标和滚动问题,还可以解决您创建的任何其他透明控件的光标和滚动问题。

请查看此可能的重复条目-这在滚动或编辑时效果不佳。0x20,或WS_EX_TRANSPARENT,意味着除非父窗口被绘制,否则控件不会被重新绘制。如果您键入,光标会在每个字符后离开,如果您滚动光标,光标会变得模糊不清:(@nevelis我已编辑了我的答案,以包含此问题的解决方法。告诉我它是否有帮助:)哦,该死的,你是个传奇人物:D我还没有用富文本框测试过这一点,但编辑正是我所需要的,它可以阻止自定义透明进度条闪烁:D:D:D你让我开心了。我马上就要开始测试RichTextBox了&让你知道!有没有办法在
CustomRTB
上仍然显示光标?@ShahidMZubair我有一个FlowLayoutPanel->TabControl->TabPage->UserControl->TranslucentPanel->CustomRTB。当我在FlowLayoutPanel上向上/向下滚动时,CustomRTB上的文本不会正确刷新,通常会完全变成空白。。知道吗?这是不正确的。这是可行的,尤其是在处理图形库时。虽然所有Winforms都是GDI+或位图(基本上),但只要将其设置为透明,然后取消背景绘制,就可以实现“透明”。不幸的是,所有2D透明度都是这样工作的(即使是伪造的3D渲染),背景是绘制的还是未绘制的,但在未绘制时,您会注意到它是一种“遮罩”颜色,文件头中有如何处理它们的说明——有关应用技巧的详细信息,请参阅PNG透明度规范。WPF也不例外。
translucentPanel1.BackColor = Color.FromArgb(50, 0, 0, 0);