Сбивается разметка внутри контрола - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

В одном из блоков программы есть необходимость вывода контактов на экран в виде визиток. Визитки состоят из контролов: 1. Тело визитки - это Panel 2. Внутри 1 PictureBox для фотографии контакта 3. Так же внутри 4 Label - это Фамилия, имя, отчество и порядковый номер. Первые 141 визитка создаются как надо. На 142-й происходит какой-то сбой. Никак не могу разобраться в чем причина. Если кто может помочь подскажите пожалуйста в чем может быть дело. Возможно слишком много контролов создаются? Тогда как еще можно реализовать идею. Это собственно код, создающий визитки:

Решение задачи: «Сбивается разметка внутри контрола»

textual
Листинг программы
Public Class Form2
    Private nRow As Integer
    Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        vCard.vcWidth = 360
        vCard.vcHeight = 230
        vCard.vcMargin = 5
        nRow = 2
        With TableLayoutPanel1
            .ColumnCount = 2
            .Width = (vCard.vcWidth + vCard.vcMargin * 2) * .ColumnCount
            .Height = (vCard.vcHeight + vCard.vcMargin * 2) * nRow
        End With
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim crd As vCard
        Dim k As Integer
        For i = 0 To nRow - 1
            For j = 0 To TableLayoutPanel1.ColumnCount - 1
                crd = New vCard
                With crd
                    .BackColor = Color.LightYellow
                    .nameLast = "Иванов " & i.ToString & j.ToString
                    .nameFirst = "Иван " & i.ToString & j.ToString
                    .namePatronymic = "Иванович " & i.ToString & j.ToString
                    .photo = ImageList1.Images(k)
                    .createCard()
                End With
                TableLayoutPanel1.Controls.Add(crd)
                k += 1
            Next
        Next
    End Sub
End Class
Public Class vCard
    Inherits Panel
    Private lbLst, lbFst, lbPtr As Label
    Private pnPhoto As Panel
    Public Sub New()
        MyBase.New()
        Me.Width = _vcWidth
        Me.Height = _vcHeight
        Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
        Me.Margin = New Padding(_vcMargin)
        _pnW = 100
        _pnH = 120
    End Sub
    Public Shared Property vcWidth As Integer
    Public Shared Property vcHeight As Integer
    Public Shared Property vcMargin As Integer
    Public Property nameLast As String 'фамилия
    Public Property nameFirst As String 'имя
    Public Property namePatronymic As String 'отчество
    Public Property photo As Image
    Public Property pnW As Integer
    Public Property pnH As Integer
    Public Sub createCard()
        addNmLast()
        addNmFirst()
        addNmPatronymic()
        addPhoto()
    End Sub
    Private Sub addNmLast()
        lbLst = New Label
        With lbLst
            .Text = _nameLast
            .AutoSize = True
            .Font = New Font("Arial", 12)
            .Left = 160
            .Top = 62
        End With
        Me.Controls.Add(lbLst)
    End Sub
    Private Sub addNmFirst()
        lbFst = New Label
        With lbFst
            .Text = _nameFirst
            .AutoSize = True
            .Font = New Font("Arial", 12)
            .Left = 160
            .Top = 95
        End With
        Me.Controls.Add(lbFst)
    End Sub
    Private Sub addNmPatronymic()
        lbPtr = New Label
        With lbPtr
            .Text = _namePatronymic
            .AutoSize = True
            .Font = New Font("Arial", 12)
            .Left = 160
            .Top = 125
        End With
        Me.Controls.Add(lbPtr)
    End Sub
    Private Sub addPhoto()
        pnPhoto = New Panel
        With pnPhoto
            .Width = _pnW
            .Height = _pnH
            .BackgroundImage = photo
            .BackgroundImageLayout = ImageLayout.Stretch
            .BorderStyle = Windows.Forms.BorderStyle.FixedSingle
            .Left = 37
            .Top = 47
        End With
        Me.Controls.Add(pnPhoto)
    End Sub
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.417 из 5
Похожие ответы