Search code examples
vb.netcoordinatespaintevent

Creating a repeating line through looping by giving the x and y coordinates


I am experimenting on the paint event of VB.Net, and for this experiment I would like to create a repeating horizontal or vertical (depending on the parameter that I inputted) line and loop through until it meets the corresponding end point x and y.

Something like this:

enter image description here

enter image description here

What I'm trying to achieve is given the x and y start point and x and y end point the function should create either vertical or horizontal line that starts with the given start point until it reaches the given end point.

I can create curveline and straightline using the paintevent, but right now I don't have any idea on how to perform looping in the given x and y start point and end point.


Solution

  • You just need to use a For loop to iterate the x/y coordinates. Here's an example:

    Public Class Form1
    
        Private Enum Orientation
            Vertical
            Horizontal
        End Enum
    
        Protected Overrides Sub OnPaint(e As PaintEventArgs)
    
            Dim orient As Orientation = Orientation.Vertical
            Dim x As Integer = 100          'X Coord
            Dim y As Integer = 100          'Y Coord
            Dim count As Integer = 10       'Number of Lines to draw
            Dim spacing As Integer = 5      'Spacing between lines in pixels
            Dim length As Integer = 20      'Length of each line in pixels
            Dim thickness As Integer = 3    'Thickness of each line in pixels
    
            drawLines(x, y, orient, count, spacing, length, thickness, e.Graphics)
        End Sub
    
        Private Sub drawLines(x As Integer, y As Integer, orient As Orientation, count As Integer, spacing As Integer, length As Integer, thickness As Integer, g As Graphics)
    
            'Create the Pen in a using block so it will be disposed.  
            'The code uses a red pen, you can use whatever color you want
            Using p As New Pen(Brushes.Red, CSng(thickness))
    
                'Here we iterate either the x or y coordinate to draw each
                'small segment.
                For i As Integer = 0 To count - 1
                    If orient = Orientation.Horizontal Then
                        g.DrawLine(p, x + ((thickness + spacing) * i), y, x + ((thickness + spacing) * i), y + length)
                    Else
                        g.DrawLine(p, x, y + ((thickness + spacing) * i), x + length, y + ((thickness + spacing) * i))
                    End If
                Next
    
            End Using
    
        End Sub
    End Class