C# - сделать этот обработчик событий многоразовым?

У меня есть два класса с одним и тем же обработчиком событий, но обработчик событий вызывает один и тот же метод с разными неровными аргументами List.

public void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    drawMap(e, myTextFileHandler.getMapCellWalls(), myTextFileHandler.getMapCellPositions());
}

public void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    myGameForm.drawMap(e, mapCellWallList, mapCellPositionList);
}

Могу ли я просто повторно использовать pictureBox1_Paint, добавив два параметра, которые являются зубчатыми списками, используемыми в drawMap()?

Я попробовал, но потом заметил, что когда я вызываю pictureBox1_Paint, я даже не даю ему один параметр, который меня очень смущает. НАПРИМЕР:

private void LevelDesignerForm_Load(object sender, EventArgs e)
{
    myGameForm.defineMapArea(this, this.pictureBox1_Paint);
}

Какова наилучшая практика? Потому что я чувствую, как будто я почти скопировал и вставил метод. Любая помощь приветствуется. Спасибо

1 ответ

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

this.Paint += new System.EventHandler(new class1().pictureBox1_Paint);

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

Однако вы можете использовать свойство Tag компонентов, если вы действительно хотите использовать этот подход. Вы можете сохранить в нем любой объект (конечно, только один), а в обработчике событий вы можете привести его тип к исходному типу и процессу.

Я чувствую, что лучшая практика - это то, что у вас есть под рукой.

Другие вопросы по тегам