如何从其他方法访问我的控件

时间:2013-04-23 16:52:20

标签: c# class variables object scope

我正在制造太空入侵者,我希望我的子弹能够从我的大炮所在的位置出来。当我按空格键时,子弹会发射,但我需要它才能在每次按空格键时访问我的cannonX的位置,它不允许我访问它的信息。

    public void tsbtnStart_Click(object sender, EventArgs e)
    {

        // Make invader

            Invader invaderX = new Invader();
            pnlBattleField.Controls.Add(invaderX);

        // Mke UFO

            Ufo ufoX = new Ufo();
            pnlBattleField.Controls.Add(ufoX);


        // Make cannon
            Cannon cannonX = new Cannon(this.pnlBattleField.Height - 80);

        if (made == false)
        {
            pnlBattleField.Controls.Add(cannonX);
            made = true;

        }
        Point location = cannonX.PointToScreen(Point.Empty);


        tmrClock.Interval = 200;
        tmrClock.Start();
        tmrClock2.Interval = 100;
        tmrClock2.Start();
    }

    public void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {

        if (e.KeyChar == (char)Keys.Space)
        {

            Bullet bulletX = new Bullet(this.pnlBattleField.Height - 80, location.x );
            // "location does not exist in current context

            pnlBattleField.Controls.Add(bulletX);
        }

    }

2 个答案:

答案 0 :(得分:0)

locationcannonXtsbtnStart_Click中的局部变量,因此一旦tsbtnStart_Click返回就会停止存在。将它们设为您的类的属性,以便它们可以在Form1_KeyPress和其他方法中保持可访问状态。

答案 1 :(得分:0)

嗯,你宣布

Point location = cannonX.PointToScreen(Point.Empty);

在您的方法中:

public void tsbtnStart_Click(object sender, EventArgs e)

您需要在开头的类成员中声明此位置。 之后,您将使用正确的值覆盖其值。

像这样:

private Point location = new Point();
location = cannonX.PointToScreen(Point.Empty); // in your method