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