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 компонентов, если вы действительно хотите использовать этот подход. Вы можете сохранить в нем любой объект (конечно, только один), а в обработчике событий вы можете привести его тип к исходному типу и процессу.
Я чувствую, что лучшая практика - это то, что у вас есть под рукой.