0

Block从类继承了一个System.Windows.Forms.Panel类。My Block 具有三个属性(在 Panel 的属性之上):

  1. Point[] Path
  2. int speed
  3. Panel Target

块获得颜色和大小,并将以给定的速度永远循环通过路径。Block 还有一个this.LocationChanged += TargetHit;如下所示的事件:

private void TargetHit(object sender, EventArgs e)
{
    if (this.OverlapsTarget()) // returns true if this and this.Target overlap
    {
        this.Parent.EndGame(); // Tell parent Form/Panel to end the game
    }
}

显然调用this.Parent.EndGame();不起作用,因为Control对象没有EndGame方法。我怎么能告诉父窗体/面板调用它的一个方法,或者只是如何告诉父级this刚刚击中它的目标(在这种情况下,目标只是父级控件中的另一个面板)并且应该在父母?

4

3 回答 3

1

您可以将 Parent 转换为您期望的类型并从那里调用该方法

private void TargetHit(object sender, EventArgs e)
{
    if (this.OverlapsTarget()) // returns true if this and this.Target overlap
    {
        if (this.Parent is YourParentType)
        {
            (this.Parent as YourParentType).EndGame(); // Tell parent Form/Panel to end the game
        }
    }
}
于 2013-02-24T22:04:53.630 回答
0

正如 建议的那样Hans Passant,我需要自己发起一个事件。该事件不必很复杂,只需要引发它以便父母知道何时采取行动。

// in my Block class
public event EventHandler Collide;

// in my parent's constructor
myBlock.Collide += this.EndGame;
于 2013-02-26T10:29:34.313 回答
0

调试代码并查看发件人值检查发件人为 (YourObjectType).Parent.EndGame()

于 2013-02-24T22:08:35.877 回答