Прозрачный контроль над PictureBox

В моей форме C # у меня есть метка, в которой отображается процент загрузки в событии загрузки:

this.lblprg.Text = overallpercent.ToString("#0") + "%"; 

Свойство BackColor элемента управления Label установлено как прозрачное, и я хочу, чтобы оно отображалось над PictureBox. Но это не работает корректно, я вижу серый фон, он не выглядит прозрачным поверх windows изображения. Как я могу это исправить?

Элемент управления 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;

Interesting Posts

Исключение начального фильтра struts2 – попытался добавить JAR, но тот же результат

Список разделов LINQ в списки из 8 членов

Запретить прокрутку родительского элемента, когда положение прокрутки внутреннего элемента достигает вершины / дна?

Как заставить многие формулы столбцов игнорировать те же строки в Excel?

Android 4.2.1 неправильный кернинг символов (интервал)

Присвоить строку, содержащую нулевой символ (\ 0), переменной в Bash

Как международные географические адреса должны храниться в реляционной базе данных?

Можно ли использовать Инициализатор объектов?

Различные формы интерфейса контракта службы WCF

Почему я должен использовать указатель, а не сам объект?

Android Google Maps, как заставить каждый маркер InfoWindow открыть другую активность?

4 идентичных модуля памяти не работают

Как захватить изображение и сохранить его с помощью встроенной камеры Android

самореферентное определение структуры?

NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder

Давайте будем гением компьютера.