In addition to other answers, I recommend to always prefer anonymous methods, even for a beginner. By many reasons, it's much more supportable. Also, names like "label_HelpText_MouseEnter" violate (good) Microsoft naming conventions. (Yes, even though the names are auto-generated by Microsoft; this is not a good excuse not to rename them).
So, use:
myLabel.MouseEnter += (sender, eventArgs) => {
DoSomething((Label)sender);
};
The convenience of lambda expression show above is that you don't even need to specify types of the argument as they are inferred from the type if the event.
If C# v.2.0 is used, lambda expressions are not available. Nevertheless, use anonymous delegates in explicit form:
myLabel.MouseEnter += delegate(object sender, MouseEventArgs eventArgs) {
DoSomething((Label)sender);
};
Why all this is more supportable? Because you don't have to follow full signature of the handler with both event arguments. Look at
DoSomething
— is uses only the label argument; the type cast is done in a "real" anonymous handler. In this way, you separate a handler from a semantic part of the handler.
Also, you can use multi-cast feature of the event by adding several different handlers in different places. It is very useful in many cases.
The code like the ones shown above can be called anywhere before the event is actually uses. With Forms, I prefer calling it in a single setup method called from the Form constructor at its end.
—SA