у меня ошибка при создании события - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть следующее:

класс игры

class Game
{
    public event EventHandler GameOver;

    public void go()
    {
        PlayerAliveEventArgs playerAlive = new PlayerAliveEventArgs(Alive);
        GameOver(this, playerAlive);
    }
}

, тогда у меня есть класс

public  class PlayerAliveEventArgs : EventArgs
{
    public bool Alive { get; set; }

    public PlayerAliveEventArgs(bool deadOrAlive)
    {
        Alive = deadOrAlive;
    }
}

в другом классе, я привязываю метод к событию...

public void Form_Load()
{
     game.GameOver += Form1_GameOverMethod; // it shows the error here.
     it says no overload of this method matches System.Eventhandler
}

public void Form1_GameOverMethod(object sender, PlayerAliveEventArgs e)
{
    if (!e.Alive)
    {
        GameTimer.Enabled = false;
        gameOver = true;
        Refresh();
    }
}

Ошибка:

В этом контексте метод не существует.

Почему это так?

хорошо, я сделал следующие изменения:

 public void Form1_GameOverMethod(object sender, EventArgs e)
 {
      PlayerAliveEventArgs d = (PlayerAliveEventArgs)e;
      if (!d.Alive)
      {
      }
 }

теперь все в порядке?или это вызовет некоторые проблемы при запуске (я хочу избавиться от отладки последнего на ..)

Ответы [ 4 ]

4 голосов
/ 13 апреля 2011

Объявление события:

public event EventHandler<PlayerAliveEventArgs> GameOver;

Подписка:

game.GameOver += Form1_GameOverMethod;

Обработчик события:

private void Form1_GameOverMethod(object sender, PlayerAliveEventArgs e)
{
    bool alive = e.Alive;
}

Увольнение:

if (this.GameOver != null) // does any subscriber exist?
{
    this.GameOver(this, new new PlayerAliveEventArgs(..));
}
1 голос
/ 13 апреля 2011

Поскольку ваш метод называется Form1_GameOverMethod.

1 голос
/ 13 апреля 2011

Вы должны использовать

game.GameOver += Form1_GameOverMethod;
0 голосов
/ 13 апреля 2011

GameOverMethod действительно не существует в этом контексте.однако существует (и я полагаю, именно это вы и предполагали): Form1_GameOverMethod.

Еще пара замечаний.Во-первых, перед тем, как запустить событие, вы должны проверить, подписался ли кто-то на него или нет.

if(GameOver!=null)
    GameOver(this, new PlayerAliveEventArgs(Alive));

Во-вторых, я считаю, что вы должны изменить объявление события на:

public event EventHandler<PlayerAliveEventArgs> GameOver;

Надеюсь, это поможет

...