【问题标题】:Why is my panel.controls empty in one function but not the other one?为什么我的 panel.controls 在一个函数中为空,而在另一个函数中没有?
【发布时间】:2015-12-18 18:59:48
【问题描述】:

我在 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 的地方只有 2 个。

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

提前致谢!

【问题讨论】:

  • 每次点击labelName 时是否有一个事件处理程序调用clickItem 子?
  • 是的,我刚刚找到了 30 秒前的解决方案啊,问题是我从一个类中添加了处理程序,我不知道是什么原因,在这种情况下,我所有的表单元素是空的。
  • 为了澄清其他偶然发现此问题的人,解决方案是将Handles labelName.Click 添加到clickItem 的末尾,对吗?所以它看起来像这样:Public Sub clickItem(sender As Object, e As EventArgs) Handles labelName.Click
  • 嗯并不是因为我有很多标签名称的实例。我只是将行 AddHandler OrderLine.labelName.Click, AddressOf PrincipalForm.clickItem 移到我的类文件之外
  • 我们不在这里解决

标签: vb.net function button panel


【解决方案1】:

所以我解决了我的问题,

我的问题是通过从类文件中添加处理程序引起的。当我这样做时,我所有的表单元素都是空的,无法访问。为了解决它,我只是移动

AddHandler OrderLine.labelName.Click, AddressOf PrincipalForm.clickItem

在我的类文件之外放入我的 PrincipalForm 中。

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多