首页 > 解决方案 > VB.NET 从列表中沿 X 坐标移动直线的所有点

问题描述

我有一个函数,可以从函数中的点列表中画线VB.NETPictureBox. 将两个点添加到列表中,并在列表中添加的所有点之间绘制一条线。但是,当将新点添加到列表中时,我希望将所有先前绘制的线移到左侧。

例如,如果分别从列表中(9, 0) (9, 4)和之间绘制了两条不同的线(10, 0) (10, 3),并将第三行添加到列表中(10, 0) (10, 2),我想像这样移动前两行:

(9, 0), (9, 4)(8, 0), (8, 4)

(10, 0), (10, 3)(9, 0), (9, 3)

这是我的意思的演示。

绿线是绘制的第一条线,黄色是绘制的第二条线。在第二个图中,添加了一条深蓝色的线,并且绘制的前两条线,黄色和绿色,都向左移动。

线条

我正在使用此代码来尝试绘制这些类型的线条。

Public Class Line

    Public ReadOnly Property StartPoint As Point

    Public ReadOnly Property EndPoint As Point

    Public Sub New(startPoint As Point, endPoint As Point)
        Me.StartPoint = startPoint
        Me.EndPoint = endPoint
    End Sub

End Class
Public Class Form1
Private lines As New List(Of Line)

Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    For Each line In lines
        e.Graphics.DrawLine(Pens.Black, line.StartPoint, line.EndPoint)
    Next
End Sub

Private Sub AddNewLine(length As Integer)

    Dim pictureBoxRightXPoint As Integer = 300 'the right most side of the PictureBox is the x coordinate of 300 (PictureBox has the x size of 300).

    For Each l As line In lines 'move all points of X in all previously drawn lines in the list to the left.
            l.StartPoint.X = l.StartPoint.X - 1
            l.EndPoint.X = l.EndPoint.X - 1

    Next
    lines.Add(New Line((pictureBoxRightXPoint, 0), (pictureBoxRightXPoint, length))
    PictureBox1.Invalidate() 'Refresh the PictureBox to redraw the lines.
End Sub

End Class

添加后,我收到以下错误:

表达式是一个值,因此不能作为赋值的目标

当我尝试1从 X 坐标中减去以将列表中已经存在的所有点向左移动时。

PictureBox将所有先前绘制的点向左移动时,如何解决此问题或在 a 中绘制一条线?(注意:列表中可能已经添加了多行)。

(仅在列表中绘制和添加行的代码来自:https ://stackoverflow.com/a/66621165/14924603 )。

标签: vb.netlistlinegdi+

解决方案


如果您想绘制我相信PictureBoxPictureBox在. 要将所有先前绘制的图形移到左侧,您可以将' 位置的位置移动到左侧。PanelPictureBoxPictureBoxPanel

您可以使用之前的函数添加新行,但将您的PictureBox并将其开头移动到Panel. 要添加新行,请使用以下命令:

Dim xint As Integer = 1
Dim r As Random = New Random
xint = xint + 1
Dim Point1 As New Point(xint, r.Next(40, 79))
Dim point2 As New Point(xint, r.Next(80, 100))

AddNewLine(Point1, point2)
PictureBox1.Left -= 1 'Move the PictureBox Left

PictureBox1.Size = New Size(PictureBox2.Size.Width + 1, 269) 'Change its size to allow for continuous line drawing 

Y您可以将我使用的随机长度替换为您操作的实际点。您链接的画线功能可以正常工作。为了澄清,请确保使用此:

Private Sub AddNewLine(startPoint As Point, endPoint As Point)
    lines.Add(New Line(startPoint, endPoint))
    PictureBox1.Invalidate()
End Sub

你的Paint活动应该是这样的:

For Each line In lines
     e.Graphics.DrawLine(Pens.Black, line.StartPoint, line.EndPoint)
Next

推荐阅读