На форме присутствует контрол PictureBox. На нем должна отображаться строка. Переопределяю событие Form_Paint следующия образом:
private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = PictureBoxCurrent.CreateGraphics();
g.DrawString(text,font,brush,point);
}
А надпись не отображается.
Запускаю работу в пошаговом режиме. После выполнении строки
g.DrawString(text,font,brush,point);
надпись на контроле PictureBox появляется, но как только выходи из обработчика Form_Paoint надпись таинственным образом пропадает с экрана.
Если изменять размеры формы, то видно, что отображаемая надпись мигает.
Может кто сталкивался с подобной ситуацией???
Если отображать надпись напрямую на форме, то указанных проблем не происходит.
Здравствуйте, Аноним, Вы писали:
А>На форме присутствует контрол PictureBox. На нем должна отображаться строка. Переопределяю событие Form_Paint следующия образом:
А> private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
А> {
А> Graphics g = PictureBoxCurrent.CreateGraphics();
А> g.DrawString(text,font,brush,point);
А> }
А>А надпись не отображается.
А>Запускаю работу в пошаговом режиме. После выполнении строки
А> g.DrawString(text,font,brush,point);
А>надпись на контроле PictureBox появляется, но как только выходи из обработчика Form_Paoint надпись таинственным образом пропадает с экрана.
А>Если изменять размеры формы, то видно, что отображаемая надпись мигает.
А>Может кто сталкивался с подобной ситуацией???
А>Если отображать надпись напрямую на форме, то указанных проблем не происходит.
Нужно подвеситься на событие PictureBox Paint и в нём производить прорисовку.
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.DrawString ("HELLO", Font, Brushes.BlueViolet, 20, 20);
}
Лучше переопределить OnPaint в PictureBox-е и рисовать там после отрисовки базовым классом.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
>>Если отображать надпись напрямую на форме, то указанных проблем не происходит.
Либо подпишись на событие Paint самого PictureBox, либо следуй совету Lelikeks.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Вообще надпись пропадает из-за того, что когда в оконную процедуру PictureBox'a приходит сообщение WM_PAINT (рассылаемое самой Windows), он перерисовывает свое содержимое без учета той строки, что ты на нем нарисовал (он просто не знает об этом). А вот когда WM_PAINT приходит в форму (в частности, при изменении размеров), то, соответственно, и строка начинает перерисовываться.
>>Если изменять размеры формы, то видно, что отображаемая надпись мигает.
Небось двойную буферизацию не включил? (см. FAQ)
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Подписка непосредственно контрола PictuteBox позволила решить возникшую проблему.
При этом надпись не мигала уже даже без включения двойной буферизации. Спасибо большое за ссылки на FAQ
взял для себя много ценного.
Запустил приложение из FAQ с отображением эллипса на форме — он не мигает даже с закомментированными строками,
где происходит включение описанных стилей.
Я так понял, что это зависит еще от производительности компьютера.