2013-03-29 36 views
-1

訪問我有下面的代碼當從另一個類

namespace Spaceship_Invaders 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 

     } 

     public class spaceship 
     { 

      Form1 myform = new Form1();   

      public void mspaceship() 
      {    
       myform.textBox1.Text = " working";    


      } 
     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      spaceship myspaceship = new spaceship(); 
      myspaceship.mspaceship(); 

     } 


    } 
} 

當我在按鈕上單擊TextBox1中沒有顯示出任何不顯示文本消息。請告訴我我在這裏錯過了什麼。

+0

只是一個觀察瞭解最佳實踐,這將幫助其他人更好地理解你的代碼。你的'宇宙飛船'classname應該是'Spaceship'。類應該以大寫字母開頭。這使得區分類和它們的實例變得更加容易。 – Scott

+0

你的設計有點搞砸了。 Spaceship不應該對填充文本框中的文本負責。表格本身應該填充文本框中的文本,這是由飛船提供的。 – Natrium

回答

3

您正在將文本設置在與正在顯示的窗體不同的窗體實例上。 spaceship類創建一個新的窗體在這裏:

Form1 myform = new Form1(); 

並繼續使用。這不是可見的形式,所以你看不到效果。

您需要傳遞Form1實例才能正常工作,spaceship應該將此作爲構造函數參數。您可以使用this關鍵字在實例方法中獲取對當前實例的引用。一個工作的例子是:

public class spaceship 
{ 
    public spaceship(Form1 form) 
    { 
     myForm = form; 
    } 

    Form1 myform; 

    public void mspaceship() 
    {    
     myform.textBox1.Text = " working";    


    } 
} 

private void button4_Click(object sender, EventArgs e) 
{ 
    spaceship myspaceship = new spaceship(this); 
    myspaceship.mspaceship(); 

} 
+0

謝謝。它的作品剛好完美 – asdfkjasdfjk

1

您需要在Form傳遞作爲一個變量,並將其存儲在你的飛船類。

public class Spaceship 
{ 
    Form1 _form;  
    public Spaceship(Form1 myform) 
    { 
     _form = myform; 
    } 

    public void mspaceship() 
    {    
      _form.textBox1.Text = " working";     
    } 
} 

然後在按鈕通上電流等級:

Spaceship myspaceship = new Spaceship(this); 
myspaceship.mspaceship(); 

個人而言,我可能會做這樣的事情使用Properties

public class Spaceship 
{ 
     public String Name { get; set; }  
     public Spaceship(string name) 
     { 
     Name = name; 
     } 
} 

在按鈕內部使用以下內容。

Spaceship spaceship = Spaceship("Enterprise"); 
this.textBox1.Text = spaceship.Name; 
+0

嗨,謝謝你的好回答。我在許多代碼中都看到像使用_form一樣使用「_」。這是什麼意思? – asdfkjasdfjk

+0

它指的是變量是私人的。私人意味着變量不能在課堂外訪問。 – eandersson

1

我建議改變你的設計了一下,所以每個類都有它自己的責任:

namespace Spaceship_Invaders 
{ 
    public partial class Form1 : Form 
    { 
     private Spaceship _myspaceship; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      _myspaceship = new spaceship(); 
      this.textBox1.Text = myspaceship.mspaceship(); 
     } 
    } 

    public class Spaceship 
    { 
     public string mspaceship() 
     {    
      return " working";    
     } 
    } 
}