Автоматическое выравнивание прямоугольника зависит от размера бумаги в vb.net - PullRequest
0 голосов
/ 15 января 2019

У меня есть прямоугольник, который добавляет еще один прямоугольник, зависит от того, сколько марок / квитанций будет напечатано.

Я добавляю еще один прямоугольник, используя for loop, но если мне удастся добавить более 3 прямоугольников, остальные прямоугольники не будут отображаться, потому что он остается ровным или если я использую if else, если e.pagebounds.widht <(последняя ширина моего прямоугольника) он идет вниз и это нормально, но как насчет следующего ... следующего ... следующего для строки 3 и выше, как я могу получить, что это мой код до сих пор </p>

Dim rec As Rectangle

    Dim x1, y1 As Integer
    Dim nextline As Integer
    x1 = 40
    y1 = 40
    Dim b As Integer = 0
    Dim containerrectangle As Rectangle
    containerrectangle = New Rectangle(e.PageBounds.X, e.PageBounds.Y, e.PageBounds.Width, e.PageBounds.Height)
    For i = 0 To 6
        If e.PageBounds.Width - 100 < x1 + b Then
            nextline = 40
            'reset the x-axis of the rectangle
            y1 = 250
            b = 40
            rec = New Rectangle(b, y1 + 50, 250, 250)
            e.Graphics.DrawRectangle(Pens.Sienna, rec)
            y1 += 250
            b += 10
        Else
            rec = New Rectangle(x1 + b, 40, 250, 250)
            e.Graphics.DrawRectangle(Pens.Sienna, rec)
            x1 += 250
            b += 10
        End If
    Next

см. Изображение https://imgur.com/a/ssv6YzX

1 Ответ

0 голосов
/ 15 января 2019

Посмотрите на этот код - я бы сказал, что он более прост:

    Dim RectTemplate As New Rectangle(0, 0, 250, 250)


    Dim GapPx As Int32 = 12                    ' set gap between rectangles
    Dim StaPt As New Point(GapPx, GapPx * 2)   ' set starting point
    Dim N As Int32 = 15                        ' set (or get) the totalnumber of rectangles
    Dim nL As Int32 = Math.Floor((e.PageBounds.Width - GapPx) / (RectTemplate.Width + GapPx))  ' number of rectangles per row
    Dim nR As Int32 = Math.Ceiling(N / nL)   ' number of rows of rectangles 

    For ir = 0 To nR - 1       ' process all rows
        For il = 0 To nL - 1   ' process all rectangles in a row
            Dim rect As New Rectangle(StaPt.X + il * (RectTemplate.Width + GapPx), StaPt.Y + ir * (RectTemplate.Height + GapPx), RectTemplate.Width, RectTemplate.Height)
            e.graphics.DrawRectangle(Pens.Sienna, rect)
        Next
    Next
...