2013-04-23 48 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 
相關問題