2013-04-23 44 views
2

我正在制造太空入侵者,我希望我的子弹能够从我的大炮的位置出来。当我按下空间时,子弹将会射击,但我需要它能够在每次按下空间时访问我的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); 
     } 

    } 
+0

你需要得到一个参考'Cannon'对象是这样的形式,这是目前在某处'pnlBattleField.Controls'上。 – David 2013-04-23 16:55:07

+0

您需要引用该对象;所以你可以访问。您还必须传递X轴和Y轴上的坐标值。 – Greg 2013-04-23 16:55:59

+0

如何引用对象? – 2013-04-23 18:16:56

回答

0

locationcannonXtsbtnStart_Click局部变量,所以他们不复存在一次tsbtnStart_Click回报。让它们成为你的课程的属性,这样它们将会持续存在并可以通过Form1_KeyPress和其他方法访问。

+0

嗨,谢谢你的帮助。你能帮我解决我的课程特点吗?我想我必须将它们添加到我的Cannon类中? 我做了这样的事情: 公众诠释位置 { 得到 { 回报的位置; }} 我迷路了,请帮 – 2013-04-23 18:14:59

+0

像@Sebastien贴,你会加入类似: '私人点位置;'类本身。你可以在你的方法之前或之后放置它。 然后,您可以在两种方法中访问相同的“位置”。 – 2013-04-23 19:20:44

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 
相关问题