如何告诉Panel的父母应该发生什么?

时间:2013-02-24 21:59:02

标签: c# .net events parent

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

  1. Point[] Path
  2. int speed
  3. Panel Target
  4. 块获取颜色和大小,并将以给定的速度永远循环路径。 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只是命中它的目标(在这种情况下,目标只是Parent控件中的另一个面板)和应该在父母身上做点什么?

3 个答案:

答案 0 :(得分: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
        }
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据Hans Passant的建议,我需要举办一场自己的活动。事件不一定要复杂,只需要提高,以便父母知道何时采取行动。

// in my Block class
public event EventHandler Collide;

// in my parent's constructor
myBlock.Collide += this.EndGame;