Мерцающее изображение при использовании аннулировать и обновить - PullRequest
0 голосов
/ 22 января 2019

Я изучаю VB.net.Много чего я пока не знаю.
Я искал повсюду, и не могу найти решение своей проблемы.

У меня в программе две формы.
Вво-первых, я прошу пользователя ввести данные, и я также делаю некоторые вычисления.
Эти результаты затем передаются во вторую форму, в которой я рисую линии.

Этоначальная форма

Это вторая форма.Здесь отображаются результаты

В зависимости от данных, которые пользователь вводит в первую форму, я хотел бы видеть результирующие изменения во второй;это работает с отправкой данных от первого ко второму ...
Проблема с графикой заключается в том, что она сохраняет первое начальное значение и больше не изменится (мне это не нравится)

Initial values, the graphics are doing ok

Я изменяю значения, но графика не сбрасывается

При поиске во многих различных сообщениях я ставлю invalidate () и update (), и графика во втором классе наконец обновляется.Проблема в том, что много мерцания: Видео мерцания программы

Это форма, в которой есть проблема ... хотя ... я не знаю, если этопроблему можно решить, попросив Form1 сделать рисунок во второй форме.

Public Class Form1

    Dim Diam_Barr As Double
    Dim Dist_Prim As Double
    Dim Dist_Seg As Double
    Dim Sag_Rin As Double
    Dim Sag_Cara As Double
    Dim Rin_3 As Double
    Dim Rin_9 As Double
    Dim Rin_6 As Double
    Dim Cara_3 As Double
    Dim Cara_6 As Double
    Dim Cara_9 As Double
    Dim NewCara_9 As Double
    Dim NewRin_9 As Double
    Dim Y0 As Double
    Dim Y1 As Double
    Dim Y2 As Double
    Dim Z0 As Double
    Dim Z1 As Double
    Dim Z2 As Double
    Dim m_Y As Double
    Dim m_Z As Double
    Dim SecondForm As New Form3

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Diam_Barr = DiamBarr.Text
        Dist_Prim = DistPrim.Text
        Dist_Seg = DistSeg.Text
        Sag_Rin = SagRin.Text
        Sag_Cara = SagCara.Text
        Cara_3 = Cara3.Text
        Cara_9 = Cara9.Text
        Rin_3 = Rin3.Text
        Rin_9 = Rin9.Text

        Cara_6 = Cara_3 + Cara_9
        Rin_6 = Rin_3 + Rin_9
        Cara6.Text = Cara_6
        Rin6.Text = Rin_6
        Y0 = (Rin_6 - Sag_Rin) / 2
        m_Y = (Cara_6 - Sag_Cara) / -Diam_Barr

        NewCara_9 = Cara_9 - Cara_3
        NewRin_9 = Rin_9 - Rin_3

        Z0 = NewRin_9 / 2
        m_Z = -NewCara_9 / Diam_Barr

        Y1 = (m_Y * Dist_Prim) + Y0
        Y2 = (m_Y * Dist_Seg) + Y0
        Z1 = (m_Z * Dist_Prim) + Z0
        Z2 = (m_Z * Dist_Seg) + Z0

        'Declarando la nueva forma y pasándole valores, también se redondean los mismos para que quepan en las cajitas de texto

        SecondForm.PendY.Text = Math.Round(m_Y, 2, MidpointRounding.AwayFromZero)
        SecondForm.PendZ.Text = Math.Round(m_Z, 2, MidpointRounding.AwayFromZero)

        SecondForm.PtY0.Text = Math.Round(Y0, 2, MidpointRounding.AwayFromZero)
        SecondForm.PtY1.Text = Math.Round(Y1, 2, MidpointRounding.AwayFromZero)
        SecondForm.PtY2.Text = Math.Round(Y2, 2, MidpointRounding.AwayFromZero)

        SecondForm.PtZ0.Text = Math.Round(Z0, 2, MidpointRounding.AwayFromZero)
        SecondForm.PtZ1.Text = Math.Round(Z1, 2, MidpointRounding.AwayFromZero)
        SecondForm.PtZ2.Text = Math.Round(Z2, 2, MidpointRounding.AwayFromZero)

        SecondForm.PtX2.Text = Math.Round(Dist_Seg, 2, MidpointRounding.AwayFromZero)

        SecondForm.Show()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        End
    End Sub
End Class

Это вторая форма:

Public Class Form3
    'Omitimos el evento de load y lo cambiamos por el evento de pintar
    'Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Private Sub Form3_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

        'Sacamos coordenadas para dibujar unas cajitas
        Dim PtA1 As New Point(245, 23)
        Dim PtA2 As New Point(673, 23)
        Dim PtA3 As New Point(673, 142)
        Dim PtA4 As New Point(245, 142)

        Dim PtB1 As New Point(245, 166)
        Dim PtB2 As New Point(673, 166)
        Dim PtB3 As New Point(673, 285)
        Dim PtB4 As New Point(245, 285)

        'puntos para dibujar las pendiente simuladas (para vertical)
        Dim PtCmax As New Point(250, 28)
        Dim PtCmin As New Point(250, 137)
        Dim PtCmed As New Point(250, 82.5)
        Dim PtDmax As New Point(673, 28)
        Dim PtDmin As New Point(673, 137)
        Dim PtDmed As New Point(673, 82.5)

        'puntos para dibujar las pendiente simuladas (para horizontal)
        Dim PtEmax As New Point(250, 171)
        Dim PtEmin As New Point(250, 280)
        Dim PtEmed As New Point(250, 225.5)
        Dim PtFmax As New Point(673, 171)
        Dim PtFmin As New Point(673, 280)
        Dim PtFmed As New Point(673, 225.5)

        'Dibujando los marcos
        e.Graphics.DrawLine(Pens.Gray, PtA1, PtA2)
        e.Graphics.DrawLine(Pens.Gray, PtA2, PtA3)
        e.Graphics.DrawLine(Pens.Gray, PtA3, PtA4)
        e.Graphics.DrawLine(Pens.Gray, PtA4, PtA1)

        e.Graphics.DrawLine(Pens.Gray, PtB1, PtB2)
        e.Graphics.DrawLine(Pens.Gray, PtB2, PtB3)
        e.Graphics.DrawLine(Pens.Gray, PtB3, PtB4)
        e.Graphics.DrawLine(Pens.Gray, PtB4, PtB1)

        Dim Pend_Y As Double
        Dim Pend_Z As Double

        Pend_Y = Convert.ToDouble(PendY.Text)
        Pend_Z = Convert.ToDouble(PendZ.Text)

        Invalidate()
        Update()

        If Pend_Y < 0 Then
            e.Graphics.DrawLine(Pens.Blue, PtCmax, PtDmin)
        ElseIf Pend_Y > 0 Then
            e.Graphics.DrawLine(Pens.Blue, PtCmin, PtDmax)
        ElseIf Pend_Y = 0 Then
            e.Graphics.DrawLine(Pens.Blue, PtCmed, PtDmed)
        End If

        If Pend_Z < 0 Then
            e.Graphics.DrawLine(Pens.Red, PtEmax, PtFmin)
        ElseIf Pend_Z > 0 Then
            e.Graphics.DrawLine(Pens.Red, PtEmin, PtFmax)
        ElseIf Pend_Z = 0 Then
            e.Graphics.DrawLine(Pens.Red, PtEmed, PtFmed)
        End If
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...