Как сделать прозрачный элемент управления UserControls BackColor на С#?

c#
Вопрос:Я создал простого джойстика в Windows Form User-Control (состоящий из переключателя и трех меток и одного индикатора выполнения). Я устанавливаю обратный цвет нового пользовательского элемента управления на прозрачный, чтобы при перетаскивании его на мою форму он смешивался с другими цветами и рисунками в форме. Я не понимаю, чего я пытаюсь достичь. Вот изображение: Лучший ответ:

Вопрос:

Я создал простого джойстика в Windows Form User-Control (состоящий из переключателя и трех меток и одного индикатора выполнения).

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

Вот изображение:

enter image description here

Лучший ответ:

UserControl уже поддерживает это, флаг ControlStyles.SupportsTransparentBackColor уже включен. Все, что вам нужно сделать, – установить свойство BackColor в Color.Transparent.

Следующее, что вы должны иметь в виду, в том, что эта прозрачность моделируется, это делается, прося родителя элемента управления рисовать себя для создания фона. Поэтому важно то, что вы правильно установите Parent. Это немного сложно сделать, если родительский элемент не является элементом управления контейнером. Как PictureBox. Дизайнер сделает форму родителем так, что вы увидите фон формы, а не окно с изображением. Вам нужно исправить это в коде, отредактировать конструктор формы и сделать его похожим на это:

var pos = this.PointToScreen(userControl11.Location); userControl11.Parent = pictureBox1; userControl11.Location = pictureBox1.PointToClient(pos); Ответ №1

В конструкторе установите стиль управления для поддержки прозрачного backcolor

SetStyle(ControlStyles.SupportsTransparentBackColor, true);

а затем установите Background в прозрачный цвет

this.BackColor = Color.Transparent;

От MSDN

Более сложный подход (и, возможно, рабочий) описывается здесь – с переопределением CreateParams и OnPaint.

Ответ №2

Почему все эти вещи?
Класс UserControl имеет свойство Region.
Установите это для того, что вам нравится, и никаких других настроек не требуется.

public partial class TranspBackground : UserControl { public TranspBackground() { InitializeComponent(); } GraphicsPath GrPath { get { GraphicsPath grPath = new GraphicsPath(); grPath.AddEllipse(this.ClientRectangle); return grPath; } } protected override void OnPaint(PaintEventArgs e) { // set the region property to the desired path like this this.Region = new System.Drawing.Region(GrPath); // other drawing goes here e.Graphics.FillEllipse(new SolidBrush(ForeColor), ClientRectangle); } }

Результат такой же, как на изображении ниже:

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

Оцените статью
Добавить комментарий