У меня проблема. Конечно, я не лучший с VB, но не могу понять, почему я не работаю.Динамическое создание меток в цикле
У меня есть база данных Access, из которой я извлекаю данные. Я пытаюсь динамически создавать ярлыки, поэтому я могу представить данные так же красиво, как хочу. Однако при попытке выполнить его я получаю исключение «Исключение System.NullReferenceException: ссылка на объект, не установленная на экземпляр объекта» в строке arrayLabels(i).Text = "Howdy"
Я почти уверен, что это нечто глупо, м просто не хватает ... но вот мой код:
Private Sub TabControl2_Click(sender As Object, e As EventArgs) Handles TabControl2.Click, btnRefresh1.Click, btnRefresh2.Click, btnRefresh3.Click, ddSelectTech.SelectedIndexChanged, ddSelectTech2.SelectedIndexChanged
If TabControl2.SelectedIndex = 0 Then
'use this to count the number of rows
Dim numRows As Integer
'here be database stuff
Dim da2 As OleDb.OleDbDataAdapter
Dim ds2 As New DataSet
Dim con2 As New OleDb.OleDbConnection
con2.ConnectionString = dbProvider & dbSource
sqlStatusOpen = "SELECT * FROM work_orders WHERE status = 'In Progress';"
da2 = New OleDb.OleDbDataAdapter(sqlStatusOpen, con2)
con2.Open()
da2.Fill(ds2, "installations2")
con2.Close()
numRows = ds2.Tables("installations2").Rows.Count()
'create an array label based on the number of rows in the table
Dim arrayLabels(numRows) As Label
'loop it to actually make the labels, position them, and such
For i = 0 To (numRows - 1) 'just looping the number of rows
Dim x As Integer = 100
Dim y As Integer = 1 + (i * 10)
Try
TabPage3.Controls.Add(arrayLabels(i))
arrayLabels(i).Text = "Howdy"
arrayLabels(i).Location = New Point(x, y)
Catch ex As Exception
MessageBox.Show(ex.ToString, "Looky there, Franky, another error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Next
ElseIf TabControl2.SelectedIndex = 1 Then
ElseIf TabControl2.SelectedIndex = 2 Then
Else
End If
End Sub
конечно, если вы думаете, есть более эффективные способы справиться с этим, я открыт для предложений.
Фактически, первым хитом google был https://msdn.microsoft.com/en-us/library/vstudio/487y7874(v=vs.100).aspx – gbianchi
О, святое дерьмо, я перевыполнял * bleep * outta что ... логика была только вне моей досягаемости. Это был один из тех «усвоенных уроков» ... – jparnell8839
@ jparnell8839. Вместо того, чтобы помещать местоположение метки в определенную точку, поместите их в «FlowLayoutPanel» на закладке? Что-то вроде 'FlowLayoutPanel.controls.Add (newLabel)' –