2015-08-04 2 views
0

Я пытаюсь передать события элементов управления на свой родительский элемент управления. У меня есть мой контроль, панель в нем, затем 3 элемента управления на панели. Это настраиваемый элемент управления, добавленный в панель макета потока во время выполнения.Пользовательский контроль, события управления передачей родительскому

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

Public Class Repeater 

Public Event RepeaterMouseUp As MouseEventHandler 

Private Sub on_Mouse_Up(ByVal sender As Object, ByVal e As MouseEventArgs) 'Handles TextBox1.onclick 
    RaiseEvent RepeaterMouseUp(sender, e) 
End Sub 

Private Sub Repeater_Load(sender As Object, e As EventArgs) Handles Me.Load 
    AddHandler lblRecName.MouseUp, AddressOf on_Mouse_Up 
    AddHandler lblNote.MouseUp, AddressOf on_Mouse_Up 
    AddHandler strRating.MouseUp, AddressOf on_Mouse_Up 
End Sub 

Private Sub lblNote_MouseUp(sender As Object, e As MouseEventArgs) Handles lblNote.MouseUp 
    RaiseEvent RepeaterMouseUp(sender, e) 
End Sub 

Private Sub Panel1_MouseUp(sender As Object, e As MouseEventArgs) Handles Panel1.MouseUp 
    RaiseEvent RepeaterMouseUp(sender, e) 
End Sub 

End Class 

Я не могу найти какие-либо пригодные для использования примеры прохождения событий мыши в родительский элемент управления. Я ценю любую помощь.

+0

Ваш пользовательский элемент управления больше похож на UserControl. Обычно UC обрабатывает большинство дочерних управляющих событий до момента, когда настраивается специальное событие для используемой формы. Если вам нужна форма, чтобы знать о контрольных событиях, вам нужно их пузырить - в этих событиях UC поднимет событие, на которое может подписаться форма. – Plutonix

+0

Согласовано. Однако, если у вас нет необходимости в событиях кликов в элементах управления, вы можете [сделать их прозрачными для кликов] (http://stackoverflow.com/questions/31353202/how-to-fix-borderless-form-resize- с-контроль-на-границах формы), используя подход, описанный Хансом Пассантом. –

+0

Редактировать добавлено. Плутоникс, ты был прав, это UserControl. Я продолжаю забывать о различиях. Оба комментария были полезны, хотя для меня найти ответ. На самом деле мне не нужно было управлять событиями щелчка, чтобы сделать что-либо, кроме как передать клиенту родителя, который работает сейчас. Спасибо за помощь! – Recoil

ответ

0

С помощью комментариев я выяснил, как это сделать. Созданные добавить обработчик для всех дочерних элементов управления на моей основной форме, даже не прикасаться к UserControl:

AddHandler rptr.lblRecName.MouseUp, AddressOf Child_MouseUp 
AddHandler rptr.lblNote.MouseUp, AddressOf Child_MouseUp 
AddHandler rptr.strRating.MouseUp, AddressOf Child_MouseUp 

Когда моя панель нажата на моей основной форме, в других подразделах я заходящие родительский контроль, который является Repeater UserControl, backcolor to black, чтобы выглядеть как выбор, и заполняя datagrid материалом, основанным на элементах управления lblRecName.Text.

Private Sub Child_MouseUp(ByVal sender As System.Object, ByVal e As MouseEventArgs) 

    Dim ctl As Control = sender 

    flpControl_Click(ctl.Parent, e) 

End Sub 

TBH, это похоже на хакерский способ справиться с этой проблемой, но это работает. Спасибо, парни!

Смежные вопросы