Пожалуйста, рассмотрите следующий фрагмент кода, который может помочь вам решить проблему.
Private ReadOnly backImage As Bitmap = 'The path of your background image.
Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
Dim srcRect As New Rectangle(0, 0, backImage.Width, backImage.Height)
Dim desRect As Rectangle = PictureBox1.ClientRectangle
Using bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Using G As Graphics = Graphics.FromImage(bmp)
G.SmoothingMode = SmoothingMode.HighQuality
G.Clear(Color.Transparent)
G.DrawImage(backImage, desRect, srcRect, GraphicsUnit.Pixel)
G.DrawString("0.00", New Font("Arial", 12, FontStyle.Regular), Brushes.Red, desRect.Right - 80, 35)
'and the other overlay painting ....
End Using
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic
e.Graphics.DrawImageUnscaled(bmp, 0, 0)
End Using
End Sub
Также, чтобы уменьшить мерцание / мерцание, создайте новый класс из элемента управления PictureBox и установите стили следующим образом:
Public Class DBPictureBox
Inherits PictureBox
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or
ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint, True)
UpdateStyles()
End Sub
'Comment or remove the MyBase....
Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs)
'MyBase.OnPaintBackground(pevent)
End Sub
End Class
И используйте его вместо стандартного PictureBox.
Редактируйте
Я неНе знаю, как вы обновляете свою процедуру рисования, и не влияет ли остальная часть вашего кода на рисование. Я думаю, что упомянутый фрагмент кода более чем достаточно. Вот быстрое демо, которое делает недействительными (НЕ обновлять) картину каждые 100 миллисекунд:
Видите ли вы мерцание? и вот чтение из моего диспетчера задач во время демонстрации:
Почти ничего.
Я предлагаю следующее:
Если вы сделали недействительным рисование с помощью событий TextChanged и / или ValueChanged элементов управления вводом, убедитесь, что ваши элементы управления не находятся вбесконечный цикл избыточности. Каждое событие вызывает другое событие снова и снова. Если нет, то:
Попробуйте ваше приложение на другом компьютере, чтобы убедиться, что у вашего основного нет проблем с оборудованием. Может быть, пришло время для новой настройки:).
Удачи.