Код обработчика событий правильный? Передача данных от ребенка к родителю - PullRequest
0 голосов
/ 03 ноября 2011

Я создал небольшой пример проекта, чтобы попытаться понять события. Я хочу в конечном итоге реализовать эти типы событий в моих будущих проектах, особенно при передаче данных из дочерней формы в родительскую форму ... это то, чем я часто занимаюсь. Мне сказали, что лучший способ сделать это, чтобы избежать связывания, это использовать события.

Мой код ниже правильного / обычного способа достижения этого?

// 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;
    }
}

Примечание. Приведенный выше код находится в одном и том же пространстве имен только для демонстрации и тестирования.

Пара вопросов тоже:

1) Я пытался заставить конструктор registerUserAccount вызвать метод registerAccount, но по какой-то причине он не выдал мне окно сообщения. Я предполагаю, что это потому, что метод registerAccount вызывается до того, как класс подпишется для прослушивания события?

2) Я пытался использовать методы в классе EventArgs, но он не позволял мне вызывать публичные методы. Это соглашение для доступа к свойствам, как у меня?

Спасибо

1 Ответ

0 голосов
/ 03 ноября 2011

1) Окно сообщения не было вызвано, потому что вы подписываетесь на событие после создания экземпляра класса, поэтому метод onAccountRegister() не будет вызываться

registerUserAccount registerAccount = new registerUserAccount();
registerAccount.onAccountCreated += onAccountRegister; 

Кстати,

Я быпредлагаем переименовать событие и метод обработчика события:

  • onAccountCreated в AccountCreated
  • onAccountRegister в AccountCreatedHandler, поскольку вы подписываетесь на событие AccountCreated, а не AccountRegister
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...