I’ve created a small sample project to try to understand events. I want to eventually implement these types of events in my future projects especially when passing data from child form to parent form … which is what I do a lot. I’ve been told the best way to do this, to avoid coupling, is to use events.
Is my code below the correct/conventional way to achieve this?
// Subscriber
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
registerUserAccount registerAccount = new registerUserAccount();
registerAccount.onAccountCreated += onAccountRegister;
registerAccount.registerAccount();
}
public void onAccountRegister(object sender, AccountCreatedEventArgs e)
{
MessageBox.Show(e.username + " - " + e.password);
}
}
public delegate void accountCreatedEventHandler(object sender, AccountCreatedEventArgs e);
// Publisher
public class registerUserAccount
{
public event accountCreatedEventHandler onAccountCreated;
public registerUserAccount()
{
}
public void registerAccount()
{
// Register account code would go here
AccountCreatedEventArgs e = new AccountCreatedEventArgs("user93248", "0Po8*(Sj4");
onAccountCreated(this, e);
}
}
// Custom Event Args
public class AccountCreatedEventArgs : EventArgs
{
public String username;
public String password;
public AccountCreatedEventArgs(String _username, String _password)
{
this.username = _username;
this.password = _password;
}
}
Note: The code above is placed in the same namespace for demonstration and testing only.
A couple of questions too:
1) I tried to have the registerUserAccount constructor call the registerAccount method, but for some reason it wasn’t giving me the message box. I assume this is because the registerAccount method is called before the the class subscribes to listen to the event?
2) I tried to use methods in the EventArgs class, but it wasn’t allowing me to call the public methods. Is it convention to access the properties like I have?
Thanks
1) Message box was not called because you are subscribing to event after the instantiation of the class so method
onAccountRegister()will not be calledBTW,
I would suggest renaming of event and event handler method:
onAccountCreatedtoAccountCreatedonAccountRegistertoAccountCreatedHandlersince you’re subscribing to AccountCreated event not AccountRegister