0

我有两个具有相同事件处理程序的类,但事件处理程序使用不同的锯齿状列表参数调用相同的方法。

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

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

4

1 回答 1

1

首先,您不能直接调用在不同类中定义的事件处理程序。尽管您可以通过在 InitializeComponent 中编辑事件处理程序映射来做到这一点,如下所示,但这不是一个好习惯。

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

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

但是,如果您真的想采用这种方法,可以使用组件的 Tag 属性。您可以将任何对象(当然只有一个)存储到其中,并且在事件处理程序中您可以类型转换为其原始类型和过程。

我觉得最好的做法是你手头的东西。

于 2013-09-10T10:29:52.493 回答