It is all about naming, that is, giving the methods a good name.
First, you write the underlying method that does the actual work.
public class Someone
{
public void DoSomething()
{
Console.Beep(); //make a noise
}
}
At this point, no UI is involved, no button, no sender, no EventArgs.
Then
Call this method when the button is clicked.
private void btnSend_Click(object sender, EventArgs e)
{
new Someone().DoSomething();
}
Call this method from any other place.
class AnotherOne
{
private void DoAnotherThing()
{
new Someone().DoSomething();
}
}
I don't answer your question on how to call btnSend_click from anywhere by passing faked sender and EventArgs.
Because that is not a good idea to write such calls - before long you will be confused by the names even if the code was written by yourself.
Button.PerformClick