Во-первых, это неправильный код:
For Each row As DataRow In dbDataSet.Rows
Dim myChat As New ChatControl()
myChat.Title = row.Item("User").ToString
myChat.Message = row.Item("Text").ToString
myChat.Time = row("Time").ToString
If FlowLayoutPanelChat.Controls.Count < 0 Then
FlowLayoutPanelChat.Controls.Clear()
Else
FlowLayoutPanelChat.Controls.Add(myChat)
End If
Next
Как может количество элементов управления в панели быть меньше нуля? Я предполагаю, что на самом деле вы действительно хотите сначала очистить все существующие элементы управления, а затем добавить все новые. В этом случае вызов Clear
должен быть вне циклов. Оператор If
не требуется, потому что Clear
не будет иметь никакого эффекта, если нет элементов управления:
FlowLayoutPanelChat.Controls.Clear()
For Each row As DataRow In dbDataSet.Rows
Dim myChat As New ChatControl()
myChat.Title = row.Item("User").ToString
myChat.Message = row.Item("Text").ToString
myChat.Time = row("Time").ToString
FlowLayoutPanelChat.Controls.Add(myChat)
Next
Для записи, этот код также можно немного упростить:
FlowLayoutPanelChat.Controls.Clear()
For Each row As DataRow In dbDataSet.Rows
FlowLayoutPanelChat.Controls.Add(New ChatControl With {.Title = row("User").ToString(),
.Message = row("Text").ToString(),
.Time = row("Time").ToString()})
Next
Что касается проблемы, посмотрите на свой класс ChatControl
и покажите мне, где в этом коде есть ссылка на Labels
. Как вы можете ожидать, что ваш Labels
будет отображать текст, который вы передаете, если у вас нет кода для этого? Избавьтесь от этих полей и просто передайте свойства напрямую в свойства Text
Labels
, например
Public Property Title As String
Get
Return titleLabel.Text
End Get
Set
titleLabel.Text = value
End Set
End Property