Сбивается разметка внутри контрола - 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