Solved

.Net Windows Form... Event Bubbling is what I guess it would be called... Please Read!!!

Posted on 2007-03-28
7
899 Views
Last Modified: 2008-11-27
Hi, I got a windows form that has 14 panels... Each panel has 3 labels on it.  What I want to capture is when someone clicks on the label.  Right now I have to do a click event for all 14 panels and for all 42 labels.  

Is there a way, hopefully easy, that I can tell the panel to handle all the events and for the labels to just buzz off...

I really want to get away from having to have that many click events.  If you ever have to cut and paste it somewhere else and you lose all the event handlers, then it really sucks unless you copied your code into notepad first.  

Tony
0
Comment
Question by:picsnet
7 Comments
 
LVL 11

Expert Comment

by:Babycorn-Starfish
ID: 18811902
A crude way would be to initially have a reference to all your labels stored in a List collection. Then iterate using your preferred looping method and add the handler to the current label. So...

(excuse the messy pseudocode)
labellist

foreach(label l in labellist)
     add event handler.

0
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 18811986
You can wire them all up in the Forms Load() event...

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each ctl As Control In Me.Controls
            If TypeOf ctl Is Panel Then
                AddHandler ctl.Click, AddressOf Something_Click
                For Each subCtl As Control In ctl.Controls
                    If TypeOf subCtl Is Label Then
                        AddHandler subCtl.Click, AddressOf Something_Click
                    End If
                Next
            End If
        Next
    End Sub

    Private Sub Something_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Debug.Print(TypeName(sender) & " --> " & sender.name)
    End Sub

End Class
0
 
LVL 1

Expert Comment

by:juniorDev
ID: 18812096
You can create your own custom control that includes the group box and the labels.  In the custom control, create the click events for each of the labels and the groupbox.  Include whatever code you want to execute.

Creating a control is just like creating a class.  It can have properties and methods.  If you want the text, size, and position of the labels to be customizable, you'll need to create the appropriate properties and methods in the control's class.  Once you've done this, you should be able to use this same control on one form as many times as you want.  Problem is solved because you actually only made one set of "click-events."
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 4

Expert Comment

by:ShannonE
ID: 18812542
So what you're saying is you want 14 events rather than 42?  It's really easy...just click on each label on each of your forms, view the properties, click the events button on the property sheet (the lightening bolt), and on the 'Click' event type the method name that you want to be called (eg Panel1Click, Panel2Click...Panel14Click).  

If it doesn't matter which Panel the label is on, then you can type the same event handler method for each label and essentially have just one method handler
0
 
LVL 1

Author Comment

by:picsnet
ID: 18816395
It seems like all these would work.  It was between idle_minds and shannone's.   I chose idleminds because it allowed me to do something very generic that I won't ever have to do again since the panels change for each client.  

Shannon's... I'd have to redo the properties for each application.  I was hoping I was missing something and it had something like web event bubbling built in, but no such luck I guess.  

Tony

0
 
LVL 1

Expert Comment

by:juniorDev
ID: 18826544
If you create a custom control, you will be able to reuse it just like a class.
0
 
LVL 1

Author Comment

by:picsnet
ID: 18827391
i know.  i like doing web ones.  I'm just not that gungho about windows programming to start down that path.  
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question