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

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

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

В одном из блоков программы есть необходимость вывода контактов на экран в виде визиток. Визитки состоят из контролов: 1. Тело визитки - это Panel 2. Внутри 1 PictureBox для фотографии контакта 3. Так же внутри 4 Label - это Фамилия, имя, отчество и порядковый номер. Первые 141 визитка создаются как надо. На 142-й происходит какой-то сбой. Никак не могу разобраться в чем причина. Если кто может помочь подскажите пожалуйста в чем может быть дело. Возможно слишком много контролов создаются? Тогда как еще можно реализовать идею. Это собственно код, создающий визитки:
Листинг программы
  1. Private HCard As Integer ' для вычисления количества визиток, которые можно расположить по горизонтали
  2. Private PeopleList(20, 2) As Bitmap
  3. Private PplCardsWidth As Integer = 360 'ширина и высота будущих визиток
  4. Private PplCardsHeight As Integer = 230
  5. Public Sub Add_People()
  6. Dim N As Integer = 200 'k-vo vizitok
  7. Dim NewPanel(N) As Panel 'telo vizitki
  8. Dim NewNum(N) As Label 'nomer dogovora ili ID
  9. Dim NewPhoto(N) As PictureBox 'foto kontakta
  10. Dim NewFIO(N, 3) As Label 'fio kontakta
  11. Dim Interval As Integer = 5 ' otstup
  12. Dim ImagesList(14) As Image 'massiv доступных fonov vizitok
  13. Dim P as integer ' dlya proverki и поиска ошибки
  14. ReDim PeopleList(N, 2) ' spisok присвоенных фонов для визитки, предполагается сделать "анимацию" при нажатии
  15. HCard = Math.Truncate((TabControl1.TabPages(0).Width - 18) / (PplCardsWidth + 10))
  16. ImagesList(0) = My.Resources.C00
  17. ImagesList(1) = My.Resources.VC010
  18. ImagesList(2) = My.Resources.VC020 ' i tak 14 fonov
  19. For Cnt As Integer = 0 To N
  20. p = Interval + 230 * Cnt
  21. PeopleList(Cnt, 0) = ImagesList(Rnd() * 14)
  22. NewPanel(Cnt) = New Panel
  23. NewPanel(Cnt).Left = Interval
  24. NewPanel(Cnt).Top = p
  25. NewPanel(Cnt).Width = PplCardsWidth
  26. NewPanel(Cnt).Height = PplCardsHeight
  27. NewPanel(Cnt).BackColor = Color.Transparent
  28. NewPanel(Cnt).BackgroundImage = PeopleList(Cnt, 0)
  29. NewPanel(Cnt).BackgroundImageLayout = ImageLayout.Stretch
  30. NewPanel(Cnt).Name = "People" & Cnt
  31. NewPanel(Cnt).Tag = Cnt
  32. Me.TabControl1.TabPages(0).Controls.Add(NewPanel(Cnt))
  33. If p <> NewPanel(Cnt).Top Then
  34. k = "gyhgy" 'на 142 визитке начинаются расхождения, как и почему???
  35. End If
  36. NewNum(Cnt) = New Label
  37. NewNum(Cnt).Text = Cnt
  38. NewNum(Cnt).Top = Interval * 1.5
  39. NewNum(Cnt).Left = NewPanel(Cnt).Width / 2
  40. Me.TabControl1.TabPages(0).Controls(Cnt).Controls.Add(NewNum(Cnt))
  41. NewPhoto(Cnt) = New PictureBox
  42. NewPhoto(Cnt).Left = 37
  43. NewPhoto(Cnt).Top = 47
  44. NewPhoto(Cnt).Width = 111
  45. NewPhoto(Cnt).Height = 111
  46. NewPhoto(Cnt).BackColor = Color.Transparent
  47. NewPhoto(Cnt).BackgroundImage = My.Resources.Male
  48. NewPhoto(Cnt).BackgroundImageLayout = ImageLayout.Zoom
  49. Me.TabControl1.TabPages(0).Controls(Cnt).Controls.Add(NewPhoto(Cnt))
  50. NewFIO(Cnt, 1) = New Label
  51. NewFIO(Cnt, 1).Left = 160
  52. NewFIO(Cnt, 1).Top = 62
  53. NewFIO(Cnt, 1).Width = 200
  54. NewFIO(Cnt, 1).Height = 30
  55. NewFIO(Cnt, 1).Text = "Ivanov"
  56. NewFIO(Cnt, 1).Font = New System.Drawing.Font("Microsoft Sans Serif", 18)
  57. Me.TabControl1.TabPages(0).Controls(Cnt).Controls.Add(NewFIO(Cnt, 1))
  58. NewFIO(Cnt, 2) = New Label
  59. NewFIO(Cnt, 2).Left = 160
  60. NewFIO(Cnt, 2).Top = 95
  61. NewFIO(Cnt, 2).Width = 200
  62. NewFIO(Cnt, 2).Height = 25
  63. NewFIO(Cnt, 2).Text = "Vasilij"
  64. NewFIO(Cnt, 2).Font = New System.Drawing.Font("Microsoft Sans Serif", 14)
  65. Me.TabControl1.TabPages(0).Controls(Cnt).Controls.Add(NewFIO(Cnt, 2))
  66. NewFIO(Cnt, 3) = New Label
  67. NewFIO(Cnt, 3).Left = 160
  68. NewFIO(Cnt, 3).Top = 125
  69. NewFIO(Cnt, 3).Width = 200
  70. NewFIO(Cnt, 3).Height = 25
  71. NewFIO(Cnt, 3).Text = "Petrovich"
  72. NewFIO(Cnt, 3).Font = New System.Drawing.Font("Microsoft Sans Serif", 14)
  73. Me.TabControl1.TabPages(0).Controls(Cnt).Controls.Add(NewFIO(Cnt, 3))
  74. With NewPanel(Cnt)
  75. AddHandler .Click, AddressOf but_Click
  76. AddHandler .MouseHover, AddressOf but_Hoover
  77. AddHandler .MouseLeave, AddressOf but_Leave
  78. AddHandler .MouseDown, AddressOf but_MouseDown
  79. AddHandler .MouseUp, AddressOf but_MouseUp
  80. AddHandler .MouseMove, AddressOf but_MouseMove
  81. End With
  82. Next
  83. End Sub

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

textual
Листинг программы
  1. Public Class Form2
  2.     Private nRow As Integer
  3.     Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  4.         vCard.vcWidth = 360
  5.         vCard.vcHeight = 230
  6.         vCard.vcMargin = 5
  7.         nRow = 2
  8.         With TableLayoutPanel1
  9.             .ColumnCount = 2
  10.             .Width = (vCard.vcWidth + vCard.vcMargin * 2) * .ColumnCount
  11.             .Height = (vCard.vcHeight + vCard.vcMargin * 2) * nRow
  12.         End With
  13.     End Sub
  14.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  15.         Dim crd As vCard
  16.         Dim k As Integer
  17.         For i = 0 To nRow - 1
  18.             For j = 0 To TableLayoutPanel1.ColumnCount - 1
  19.                 crd = New vCard
  20.                 With crd
  21.                     .BackColor = Color.LightYellow
  22.                     .nameLast = "Иванов " & i.ToString & j.ToString
  23.                     .nameFirst = "Иван " & i.ToString & j.ToString
  24.                     .namePatronymic = "Иванович " & i.ToString & j.ToString
  25.                     .photo = ImageList1.Images(k)
  26.                     .createCard()
  27.                 End With
  28.                 TableLayoutPanel1.Controls.Add(crd)
  29.                 k += 1
  30.             Next
  31.         Next
  32.     End Sub
  33. End Class
  34. Public Class vCard
  35.     Inherits Panel
  36.     Private lbLst, lbFst, lbPtr As Label
  37.     Private pnPhoto As Panel
  38.     Public Sub New()
  39.         MyBase.New()
  40.         Me.Width = _vcWidth
  41.         Me.Height = _vcHeight
  42.         Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
  43.         Me.Margin = New Padding(_vcMargin)
  44.         _pnW = 100
  45.         _pnH = 120
  46.     End Sub
  47.     Public Shared Property vcWidth As Integer
  48.     Public Shared Property vcHeight As Integer
  49.     Public Shared Property vcMargin As Integer
  50.     Public Property nameLast As String 'фамилия
  51.     Public Property nameFirst As String 'имя
  52.     Public Property namePatronymic As String 'отчество
  53.     Public Property photo As Image
  54.     Public Property pnW As Integer
  55.     Public Property pnH As Integer
  56.     Public Sub createCard()
  57.         addNmLast()
  58.         addNmFirst()
  59.         addNmPatronymic()
  60.         addPhoto()
  61.     End Sub
  62.     Private Sub addNmLast()
  63.         lbLst = New Label
  64.         With lbLst
  65.             .Text = _nameLast
  66.             .AutoSize = True
  67.             .Font = New Font("Arial", 12)
  68.             .Left = 160
  69.             .Top = 62
  70.         End With
  71.         Me.Controls.Add(lbLst)
  72.     End Sub
  73.     Private Sub addNmFirst()
  74.         lbFst = New Label
  75.         With lbFst
  76.             .Text = _nameFirst
  77.             .AutoSize = True
  78.             .Font = New Font("Arial", 12)
  79.             .Left = 160
  80.             .Top = 95
  81.         End With
  82.         Me.Controls.Add(lbFst)
  83.     End Sub
  84.     Private Sub addNmPatronymic()
  85.         lbPtr = New Label
  86.         With lbPtr
  87.             .Text = _namePatronymic
  88.             .AutoSize = True
  89.             .Font = New Font("Arial", 12)
  90.             .Left = 160
  91.             .Top = 125
  92.         End With
  93.         Me.Controls.Add(lbPtr)
  94.     End Sub
  95.     Private Sub addPhoto()
  96.         pnPhoto = New Panel
  97.         With pnPhoto
  98.             .Width = _pnW
  99.             .Height = _pnH
  100.             .BackgroundImage = photo
  101.             .BackgroundImageLayout = ImageLayout.Stretch
  102.             .BorderStyle = Windows.Forms.BorderStyle.FixedSingle
  103.             .Left = 37
  104.             .Top = 47
  105.         End With
  106.         Me.Controls.Add(pnPhoto)
  107.     End Sub
  108. End Class

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


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

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

12   голосов , оценка 4.417 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы