2015-12-18 1 views
0

У меня проблема в программе, которую я разрабатываю в vb.net.Почему мой panel.controls пуст в одной функции, но не в другой?

У меня есть pnlFoo, который содержит pnlBar. Я использую 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 

Так что в этом Funtion, pnlBar пуст и не показывает какой-либо из элементов в нем.

Есть только 2 места, в которых я использую pnlBar в своем коде.

Так что мой вопрос: Почему pnlBar пуст, и моя кнопка не включается? Как я могу это исправить?

Заранее благодарен!

+0

У вас есть обработчик событий для каждого нажатия на кнопку "labelName", которая вызывает 'clickItem' sub? – charliefox2

+0

Да, я просто нашел решение как 30 секунд назад ahah, проблема заключалась в том, что я добавлял обработчика из класса и, я не знаю, по какой причине, в этом случае все мои элементы формы пустые. – Matriac

+0

Чтобы прояснить для кого-либо еще, кто наткнулся на это, решение заключалось в том, чтобы добавить 'Handles labelName.Click' в конец' clickItem', правильно? Итак, это выглядит так: 'Public Sub clickItem (отправитель As Object, e As EventArgs) Обрабатывает labelName.Click' – charliefox2

ответ

0

Так я решил мою проблему,

моя проблема была причина путем добавления обработчика из файла класса. Когда я это делаю, все мои элементы формы пусты и не могут быть доступны. Чтобы решить эту проблему, я только переведу

AddHandler OrderLine.labelName.Click, AddressOf PrincipalForm.clickItem 

вне моего класса файл в мой PrincipalForm.