прозрачного управления richtextbox

Как сделать мой richtext box прозрачным
Я хочу этого, потому что я пытаюсь поместить текст поверх графического изображения (которое является фоном моей формы).

вот почему я хотел, чтобы richTextBox был прозрачным,
Я использую .NET, c# и в приложении Windows form

4 ответов


в элементе управления WinForms нет такой вещи, как истинная прозрачность. Прозрачный режим наследует фон по умолчанию своего родителя. Как я работал вокруг него в прошлом было использовать OnPaint событие, а затем использовать Graphics.DrawString метод для размещения текста, где я хочу его.


Я знаю, что этот ответ очень поздно, но я надеюсь, что это поможет другим, кто хотел бы простой способ сделать это.

сначала создайте новый пользовательский элемент управления в своем проекте и дайте ему имя, скажем CustomRTB.цезий. После этого откройте частичный класс и измените:

public partial class CustomRTB : UserControl

в:

public partial class CustomRTB : RichTextBox

это вызовет ошибку при открытии файла дизайна, поэтому просто перейдите к конструктору.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, изменяя первую строку в этом коде. Надеюсь, это поможет :)

Edit:

проблема с вышеуказанным элементом управления заключается в том, что он может использоваться только для программного отображения текста, поскольку его проблематично редактировать во время запуска или отладки приложения (как объясняет @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;
    }
}

вам придется позаботиться об ошибке, которая возникает при создании проекта, просто комментируя строку в конструкторе.cs файл, который бросает его. После этого снова создайте свой проект, и полупрозрачная панель появится в панели инструментов, как и раньше. Используйте эту панель в качестве родительского элемента управления для прозрачного richtextbox, т. е. поместите панель в форму и поместите RTB внутри нее. Вы можете также установите свойство BorderStyle как None, чтобы удалить трассировку RTB из пользовательского интерфейса.

вы также можете контролировать непрозрачность полупрозрачной панели, используя свое свойство BackColor в своей программе:

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

изменение аргументов, переданных выше, позволит вам контролировать непрозрачность и цвет панели.

этот обходной путь решит проблемы курсора и прокрутки не только прозрачного RTB, но и любого другого прозрачного управления вами создавать.



нет никакого способа иметь элементы управления Windows Forms с прозрачным фоном. Многие пробовали это раньше, и все потерпели неудачу. Некоторые придумали экзотические хаки, но все они терпят неудачу в некоторых деталях. Используйте WPF или HTML, если вам нужны более расширенные возможности рендеринга, чем старые Windows Forms.