为什么我的panel.controls在一个函数中是空的而在另一个函数中是空的?

时间:2015-12-18 18:59:49

标签: vb.net function button panel

我在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是空的并且不显示其中的任何项目。

我的代码中只有2个地方使用pnlBar。

所以我的问题是: 为什么pnlBar为空而我的按钮没有启用?我该如何解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

所以我解决了我的问题,

我的问题是因为从类文件添加处理程序。当我这样做时,我的所有表单元素都是空的,无法访问。为了解决这个问题,我谨慎行事

AddHandler OrderLine.labelName.Click, AddressOf PrincipalForm.clickItem

在我的类文件之外进入我的PrincipalForm。