прозрачного управления 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.