2012-12-01 59 views
0

我有一個帶有一些構造函數的類,一個帶有命令按鈕的窗體和一個在我的「form.cs」中設置爲20的公共變量的類。我怎樣才能減少變量每次我點擊按鈕,直到它變成零?我嘗試了幾個方法,比如click事件中的一個循環,在構造函數(變量=變量-1)中的簡單演繹,但它們不工作! 嘗試這樣:在運行時更改int值

public void AssignSeat() 
{ 
    seats = seats - 1;  
} 

然後

private void button2_Click(object sender, EventArgs e) 
{ 
    Class1 Class1 = new Class1(); 
    Class1.AssignSeat(); 
    Class1.MSGbox();      
} 

它編譯和運行W/O錯誤,但它永遠不會停止!

+0

你的意思是'它永不停止'?如果您點擊該按鈕,它將創建一個新的班級並呼叫AssignSeat。如果再次單擊它,它將創建一個新的零件 –

回答

0
  1. 是同一類兩種方法如果是,那麼你就需要創建一個對象的Class1訪問它。
  2. 每次單擊按鈕時變量設置爲20。
  3. 根據你寫的你每次創建一個新的實例,所以你的問題出現了。

聲明ICOUNT & ITEMP外部按鈕點擊

INT ICOUNT = 0; int iTemp = 20;

private void button2_Click(object sender, EventArgs e) 
    { 
     if (iCount == 0) 
     { 
      iTemp = 20; 
      iCount++; 
     } 
     iTemp = iTemp - 1; 
     MessageBox.Show(iTemp.ToString()); 
    } 
} 
+0

這個答案解決了我的問題,但新的問題出現了。這工作絕對好,但當我改變形式,我回到這一個iTemp被賦予一個值20再次,我不想發生!我想我應該宣佈iTemp在Form1這是第一種形式出現當我運行程序?我總共有3種形式,form1是第一種形式,它有兩個命令按鈕,我選擇form1或form2。 –

+0

您應該在Form1中聲明iTemp並將整數傳遞給您所需的表單。您可以使用屬性來設置變量的值或將其作爲參考傳遞。 – shiju87

4

這裏:

Class1 Class1 = new Class1(); 
Class1.AssignSeat(); 
Class1.MSGbox(); 

...你創建的每一個按鈕被點擊時Class1一個實例。 button2_click方法是否已經在Class1之內?如果是這樣,您只需撥打AssignSeat - 您無需創建表單的新實例。

(我還強烈建議公共變量,但那是另一回事。)

+0

否其不在Class1內。看起來像我完全錯了,我剛開始C#。 –

0

每次要建設的Class1的新實例,單擊該按鈕,然後你遞減的這席新創建的實例一旦方法結束就會被銷燬。
簡單有型的Class1的私有變量表單裏(中調用其c​​ostructor形式的一個),並使用:

public partial class Form1: Form { 
    private Class1 _class1 = new Class1(); 

    private void button2_Click(object sender, EventArgs e) { 
     _class1.AssignSeat(); 
     _class1.MSGbox(); 
    } 
} 
0

雖然你正在創建一個新的對象,每次單擊該按鈕,來解決你的問題,使seats靜態。

這是一個不好的設計,因爲@JonSkeet說