为什么我的 panel.controls 在一个函数中是空的,而在另一个函数中不是?
Why is my panel.controls empty in one function but not the other one?
我在 vb.net 中开发的程序有问题。
我有一个包含 pnlBar 的 pnlFoo。我在我的两个函数中使用了 pnlBar。在第一个中,一切顺利,pnlBar 显示了它在他的控件中的所有标签和数字。问题出在第二个函数中,使用相同的面板,它总是显示我的 pnlBar 为空,就像里面没有标签一样。
这是我的代码:
第一个函数:
Private Sub txtItem_TextChanged(sender As Object, e As EventArgs) Handles txtItem.TextChanged
If txtItem.Text <> "" Then
Dim OrderLine As C_OrderLine = New C_OrderLine(C_Item.load(getIdFromString(txtItem.Text)))
OrderLine.labelName.Location = New Point(50, 0 + (30 * pnlBar.Controls.Count() / 3)) 'This is a label
OrderLine.quantity.Location = New Point(0, 0 + (30 * pnlBar.Controls.Count() / 3)) 'This is a NumericUpDown
OrderLine.labelPrice.Location = New Point(475, 0 + (30 * pnlBar.Controls.Count() / 3)) 'This is a label
pnlBar.Controls.Add(OrderLine.labelName)
pnlBar.Controls.Add(OrderLine.quantity)
pnlBar.Controls.Add(OrderLine.labelPrice)
Order.OrderLines.Add(OrderLine) 'OrderLines is a List of OrderLine
txtItem.Text = ""
End If
End Sub
因此,当我在我的 pnlBar 中添加内容时,它可以工作并且 pnlBar 不为空。
我的第二个函数:
Public Sub clickItem(sender As Object, e As EventArgs) ' Happens everytime a click is detected on a labelName
For Each lbl As Label In pnlBar.Controls ' HERE pnlBar is empty
lbl.BackColor = Color.Gray
Next
Dim label As Label = DirectCast(sender, Label)
label.BackColor = Color.Red
btnDelete.Enabled = True 'HERE my button will stay disabled.
End Sub
所以在这个函数中,pnlBar 是空的,不显示其中的任何项目。
我的代码中只有两个地方使用了 pnlBar。
所以我的问题是:
为什么 pnlBar 是空的,而我的按钮没有变为启用状态?我该如何解决这个问题?
提前致谢!
所以我解决了我的问题,
我的问题是从 class 文件中添加处理程序引起的。当我这样做时,我所有的表单元素都是空的,无法访问。为了解决它,我只需要移动
AddHandler OrderLine.labelName.Click, AddressOf PrincipalForm.clickItem
在我的 class 文件之外进入我的 PrincipalForm 。
我在 vb.net 中开发的程序有问题。
我有一个包含 pnlBar 的 pnlFoo。我在我的两个函数中使用了 pnlBar。在第一个中,一切顺利,pnlBar 显示了它在他的控件中的所有标签和数字。问题出在第二个函数中,使用相同的面板,它总是显示我的 pnlBar 为空,就像里面没有标签一样。
这是我的代码:
第一个函数:
Private Sub txtItem_TextChanged(sender As Object, e As EventArgs) Handles txtItem.TextChanged
If txtItem.Text <> "" Then
Dim OrderLine As C_OrderLine = New C_OrderLine(C_Item.load(getIdFromString(txtItem.Text)))
OrderLine.labelName.Location = New Point(50, 0 + (30 * pnlBar.Controls.Count() / 3)) 'This is a label
OrderLine.quantity.Location = New Point(0, 0 + (30 * pnlBar.Controls.Count() / 3)) 'This is a NumericUpDown
OrderLine.labelPrice.Location = New Point(475, 0 + (30 * pnlBar.Controls.Count() / 3)) 'This is a label
pnlBar.Controls.Add(OrderLine.labelName)
pnlBar.Controls.Add(OrderLine.quantity)
pnlBar.Controls.Add(OrderLine.labelPrice)
Order.OrderLines.Add(OrderLine) 'OrderLines is a List of OrderLine
txtItem.Text = ""
End If
End Sub
因此,当我在我的 pnlBar 中添加内容时,它可以工作并且 pnlBar 不为空。
我的第二个函数:
Public Sub clickItem(sender As Object, e As EventArgs) ' Happens everytime a click is detected on a labelName
For Each lbl As Label In pnlBar.Controls ' HERE pnlBar is empty
lbl.BackColor = Color.Gray
Next
Dim label As Label = DirectCast(sender, Label)
label.BackColor = Color.Red
btnDelete.Enabled = True 'HERE my button will stay disabled.
End Sub
所以在这个函数中,pnlBar 是空的,不显示其中的任何项目。
我的代码中只有两个地方使用了 pnlBar。
所以我的问题是: 为什么 pnlBar 是空的,而我的按钮没有变为启用状态?我该如何解决这个问题?
提前致谢!
所以我解决了我的问题,
我的问题是从 class 文件中添加处理程序引起的。当我这样做时,我所有的表单元素都是空的,无法访问。为了解决它,我只需要移动
AddHandler OrderLine.labelName.Click, AddressOf PrincipalForm.clickItem
在我的 class 文件之外进入我的 PrincipalForm 。