прозрачный richTextBox - PullRequest
       3

прозрачный richTextBox

7 голосов
/ 06 февраля 2011

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

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

Ответы [ 4 ]

7 голосов
/ 01 ноября 2013

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

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

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;
    }
}

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

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

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

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

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

5 голосов
/ 06 февраля 2011

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

3 голосов
/ 06 февраля 2011
1 голос
/ 06 февраля 2011

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

...