Behind the scenes all events are based on another feature of .Net called delegates - in simple terms these define how a function looks, it's signature, (return type, number and type of parameters etc) but not what it actually does. This means any function that has the same signature can be used in place of the delegate.
To keep the system flexible under .Net all the standard events are based on a delegate called System.EventHandler which has two parameters - the first of type object and the second of type EventArgs. This means events raised from different places in the system - not just the form itself (as you said) can be handled in one place.
The first parameter will contain the control that raised the event but it's typed to an object due to the fact it can contain any .Net class or control.
The directcast simple converts the object variable to the correct datatype (button in the case posted above). This maybe a problem and need further checking as the handler could work not only for multiple controls but multiple controls of different types
i.e.
Private Sub Something_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, TextBox1.Click
Dim b As Button 'can only hold a button
Dim t As TextBox 'can only hold a textbox
Dim c As Control 'can hold any windows control
'the followin will work with either button or textbox in this sample
'but c will only allow access to the features common to all
'controls - any button or textbox specifics will be unavailable
c = DirectCast(sender, Control)
MessageBox.Show(c.Name)
'If the type is unkown we need to check first - as the following lines show.
If TypeOf sender Is TextBox Then
t = DirectCast(sender, TextBox)
'use t here
End If
If TypeOf sender Is Button Then
b = DirectCast(sender, Button)
'use b here
End If
End Sub
the above example only shows what can be done - if you need different processing for different control types using different event handlers is probably a better idea.
Most controls also support the .Name property which should always be the name - some controls return different things for the .ToString function.
Finally to display the code put it between [ vb ] and [ /vb ] tags (without the spaces between the square brackets).
edit: typo