Я хочу нарисовать текст над PictureBox в цикле foreach. Это код, который отвечает за рендеринг (GG — это PictureBox, который в данный момент находится в цикле)
if (GG != null)
{
((PictureBox)GG).Image = (Image)obj;
using (Graphics g = ((PictureBox)GG).CreateGraphics()) {
g.DrawString(i["amount"].ToString(), kryptonRichTextBox1.Font,
new SolidBrush(Color.Gold), new Point(16, 18));
}
}
Но, к сожалению, текст не отображается. Если я закомментирую
//((PictureBox)GG).Image = (Image)obj;
линия, это работает! Я понятия не имею, как заставить его работать.
Я хотел использовать TextRenderer, но я не знаю, как получить IDeviceContext элемента управления (и все примеры, которые я вижу в Интернете, используют PaintEventArgs.Graphics в событии Paint).
Кроме того, если это уместно, GG PictureBox является дочерним элементом другого изображения и имеет прозрачный фон.
Я попытался обновить окно после аннулирования рабочего кода:
if (GG != null)
{
((PictureBox)GG).Image = (Image)obj;
((PictureBox)GG).Invalidate();
((PictureBox)GG).Refresh();
using (Graphics g = ((PictureBox)GG).CreateGraphics()) {
g.DrawString(i["amount"].ToString(), kryptonRichTextBox1.Font,
new SolidBrush(Color.Gold), new Point(16, 18));
}
}