Прозрачный контроль над PictureBox
В моей форме C # у меня есть метка, в которой отображается процент загрузки в событии загрузки:
this.lblprg.Text = overallpercent.ToString("#0") + "%";
Свойство BackColor элемента управления Label установлено как прозрачное, и я хочу, чтобы оно отображалось над PictureBox. Но это не работает корректно, я вижу серый фон, он не выглядит прозрачным поверх windows изображения. Как я могу это исправить?
- Ярлык под изображением в UIButton
- Как настроить Mail.App и Google Mail?
- Редактирование надписей (текстовых) меток в ggplot
- Добавить текстовую метку в узел d3 в силовой макете
- Назначение h: outputLabel и атрибут «для»
Элемент управления Label поддерживает прозрачность. Просто дизайнер не позволит вам правильно разместить ярлык. Элемент управления PictureBox не является элементом управления контейнером, поэтому форма становится родителем метки. Итак, вы видите фон формы.
Это легко исправить, добавив немного кода в конструктор формы. Вам нужно будет изменить свойство родительского ярлыка и пересчитать его местоположение, так как оно теперь относительно поля изображения вместо формы. Как это:
public Form1() { InitializeComponent(); var pos = this.PointToScreen(label1.Location); pos = pictureBox1.PointToClient(pos); label1.Parent = pictureBox1; label1.Location = pos; label1.BackColor = Color.Transparent; }
Похоже, что во время выполнения:
Другой подход – решить проблему времени разработки. Это просто принимает атрибут. Добавьте ссылку на System.Design и добавьте class в свой проект, вставьте этот код:
using System.ComponentModel; using System.Windows.Forms; using System.Windows.Forms.Design; // Add reference to System.Design [Designer(typeof(ParentControlDesigner))] class PictureContainer : PictureBox {}
Вы можете просто использовать
label1.Parent = pictureBox1; label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239
Вы можете рисовать текст с помощью TextRenderer, который будет рисовать его без фона:
private void pictureBox1_Paint(object sender, PaintEventArgs e) { TextRenderer.DrawText(e.Graphics, overallpercent.ToString("#0") + "%", this.Font, new Point(10, 10), Color.Red); }
Когда общее значение переменной изменяется, обновите pictureBox:
pictureBox1.Refresh();
Вы также можете использовать Graphics.DrawString, но TextRenderer.DrawText (с использованием GDI) быстрее, чем DrawString (GDI +)
Также посмотрите здесь другой ответ и ссылку DrawText здесь
Легко для вашего дизайна. Вы можете разместить свою метку внутри панели. и установить фоновое изображение панели – это то, что вы хотите. установленный фон метки прозрачен
Используя Visual Studio с Windows Form, вы можете применять прозрачность к ярлыкам или другим элементам, добавляя с помощью System.Drawing; в Form1.Designer.cs Таким образом, у вас будет прозрачность, доступная на панели «Свойства» (в «Внешний вид в BackColor»). Или просто отредактируйте код в Designer.cs this.label1.BackColor = System.Drawing.Color.Transparent;