Я хочу нарисовать текст над PictureBox в цикле foreach. Это код, который отвечает за предоставление (GG является PictureBox, что в настоящее время в петле)Graphics.DrawString не работает
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));
}
}
Я попытался добавить это ниже ((PictureBox) GG) .Image = (Image) obj; line, и текст мигает в течение секунды и исчезает. – niklon
Решенный, ответьте на вопрос. – niklon
Хмм, нет, вы все еще ошибаетесь, заставляя перекрашивать * до того, как вы изменили изображение. Используйте Invalidate(), никогда не используйте пункт Refresh(). –