C# - 使这个事件处理程序可重用吗?

时间:2013-09-10 10:18:40

标签: c# reusability

我有两个具有相同事件处理程序的类,但事件处理程序使用不同的锯齿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时,我甚至没有给它一个参数,这让我非常困惑。 EG:

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

最佳做法是什么?因为我觉得好像我几乎复制和粘贴了一个方法。任何帮助赞赏。感谢

1 个答案:

答案 0 :(得分:1)

首先,您不能直接调用在不同类中定义的事件处理程序。虽然您可以通过编辑InitializeComponent中的事件处理程序映射来完成此操作,但这不是一种好的做法。

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

其次,您无法更改事件处理程序的签名。如果你观察上面的代码,你只是给出方法的名称。因此,您没有将数据传递给它的规定。

但是,如果您真的想使用此方法,则可以使用组件的Tag属性。您可以将任何对象(当然只有一个)存储到其中,并且在hanlder事件中您可以对其原始类型和进程进行类型转换。

我觉得最好的做法就是掌握在手中。