0

Blockクラスからクラスを継承しましたSystem.Windows.Forms.Panel。マイブロックには、(パネルのプロパティに加えて)3つのプロパティがあります。

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

ブロックは色とサイズを取得し、指定された速度でパスを永久にループします。ブロックには、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();ため、明らかに呼び出しは機能しません。親のフォーム/パネルにそのメソッドの1つを呼び出すように指示するにはどうすればよいですか、または単にターゲットにヒットしたことを親に指示する方法(この場合、ターゲットは親のコントロールの他のパネルにすぎません)で、何かを行う必要があります。親?ControlEndGamethis

4

3 に答える 3

1

親を期待するタイプとしてキャストし、そこからメソッドを呼び出すことができます

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

コードをデバッグし、送信者の値を確認して送信者を(YourObjectType).Parent.EndGame()として確認します

于 2013-02-24T22:08:35.877 に答える
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 に答える