2012-12-01 31 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说