2016-05-17 5 views
0

Я добавляю много панелей в FlowLayoutPanel, просматривая базу данных и добавляя панель с соответствующими метками для каждой записи в базе данных. Мне нужно иметь возможность затем кодировать то, что происходит, когда нажимается какая-либо из панелей, но я не могу понять, как это сделать.Использование событий и свойств созданных объектов

Это код используется для создания панелей

For i As Integer = 0 To IDs.Count - 1 
    Dim testPanel As New Panel With 
     { 
      .Height = 50, 
      .Width = 140, 
      .BackColor = Blue, 
      .Name = "rPanel" + i.ToString 
     } 
    FlowLayoutPanel.Controls.Add(testPanel) 
Next 

ответ

1

Добавьте обработчик события к событию MouseClick, как это.

For i As Integer = 0 To IDs.Count - 1 
    Dim testPanel As New Panel With 
     { 
      .Height = 50, 
      .Width = 140, 
      .BackColor = Blue, 
      .Name = "rPanel" + i.ToString 
     } 
    AddHandler testPanel.MouseClick, AddressOf PanelMouseClick 
    FlowLayoutPanel.Controls.Add(testPanel) 
Next 

Затем создайте вспомогательную подставку для события. Как ..

Private Sub PanelMouseClick(sender As Object, e As MouseEventArgs) 
    MessageBox.Show("Mouse Clicked") 
End Sub 

AddHandler позволяет установить событие, которое вы хотите обработать. AddressOf позволяет вам установить, какой субтитр вы хотите, чтобы вызов обрабатывал указанное событие. Если вы не уверены в подпикселе, вы можете использовать Visual Studio для генерации каких-либо созданных подпрограмм с правильными сигнатурами.

+0

Это работало замечательно. Благодарю. В качестве продолжения: Если я добавлю метку в качестве элемента управления на эту панель, можно ли запустить ее с той же подтекой, когда нажимается метка, только с панелью в качестве отправителя вместо метки? – OtherBarry

+0

Если событие, к которому вы обращаетесь, имеет одну и ту же подпись, вы можете применить несколько событий к одному обработчику да. Так что да, вы можете просто добавить к ярлыку тот же обработчик события клика. Если вы используете событие, которое отличается от другой, извлеките свою логику кода в отдельный метод и вызовите это из определенных обработчиков событий. – Malcor

0

Добавить обработчик на панель, прежде чем добавлять ее на другую панель.

AddHandler testPanel.Click, AddressOf Method 
FlowLayoutPanel.Controls.Add(testPanel) 

Добавить новый метод с отправителем и EventArgs как значения:

Private Sub Method(sender As Object, e As EventArgs) 
    'Your Code 
End Sub 
Смежные вопросы