Невозможно очистить рисунки в PictureBox с помощью VB.NET - PullRequest
0 голосов
/ 05 мая 2020

Я использую следующий код для создания простых рисунков от руки (bru sh) поверх PictureBox1 . Рисовать нормально, но я не могу навсегда очистить рисунки, которые я сделал. Если я нажму Button1 , рисунки будут очищены, но как только я перейду на PictureBox1 , все старые рисунки (и изображение PictureBox1) появятся снова. Есть предложения?

  Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
        If e.Button = MouseButtons.Left Then
            mousePath.StartFigure()
        End If
  End Sub

Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
        '// slide annotations 
        If e.Button = MouseButtons.Left Then
               Try
            mousePath.AddLine(e.X, e.Y, e.X, e.Y)    'Add mouse coordiantes to mousePath
             Catch
             End Try
        End If
       PictureBox1.Invalidate()
    End Sub

 Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
        '// slide annotations 
        Try
            '// drwaing options
            myUserColor = System.Drawing.Color.Red
            myAlpha = 255
            myPenWidth = 3
            CurrentPen = New Pen(myUserColor, myPenWidth)
            e.Graphics.DrawPath(CurrentPen, mousePath)
        Catch
        End Try
    End Sub

Private Sub Button1_Click_2(sender As Object, e As EventArgs) Handles Button1.Click
        Dim g As Graphics
        g = PictureBox1.CreateGraphics()
        g.Clear(PictureBox1.BackColor)
        g.Dispose()
    End Sub

1 Ответ

1 голос
/ 05 мая 2020

НИКОГДА не звоните CreateGraphics. ВСЕГДА делайте ВСЕ свои рисунки в обработчике событий Paint. Вы создаете объект Graphics в обработчике событий Click и очищаете его, но какая польза от этого, когда вы снова выполняете рисование в обработчике событий Paint в следующий раз, когда это событие возникает?

Что вам нужно сделать, так это сохранить все данные, которые представляют ваш рисунок, в одном или нескольких полях, обновлять эти данные всякий раз, когда вы хотите изменить рисунок, и рисовать, используя эти данные в обработчике событий Paint. Если вы хотите очистить рисунок, вы очищаете эти данные, а затем принудительно перерисовываете, вызывая Invalidate. В обработчике событий Paint вы рисуете GraphicsPath, хранящееся в поле mousePath. Это означает, что в обработчике событий Click вам нужно очистить этот GraphicsPath, а затем вызвать Invalidate. Затем появится событие Paint, которое сначала очистит существующий рисунок, а затем выполнит новый. Поскольку новых дел нет, все останется чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...