我从Block
班继承了System.Windows.Forms.Panel
班。
My Block有三个属性(在Panel的属性之上):
Point[] Path
int speed
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
只是命中它的目标(在这种情况下,目标只是Parent控件中的另一个面板)和应该在父母身上做点什么?
答案 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;