0

我有一个带有一些构造函数的类,一个带有命令按钮的表单和一个在我的“form.cs”中设置为 20 的公共变量。每次单击按钮时如何减少变量直到它变为零?我尝试了一些方法,例如单击事件中的循环,构造函数中的简单推导(变量=变量-1),但它们不起作用!试过这个:

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

接着

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

它编译并运行没有错误,但它永远不会停止!

4

4 回答 4

4

Here:

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

... you're creating a new instance of Class1 each time the button is clicked. Is the button2_click method already within Class1? If so, you just need to call AssignSeat - you don't need to create a new instance of the form.

(I'd also strongly advise against public variables, but that's another matter.)

于 2012-12-01T18:19:14.650 回答
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());
    }
}
于 2012-12-01T18:50:07.897 回答
0

每次单击按钮时,您都在构建 Class1 的新实例,然后减少此新创建实例的席位,该实例在方法结束时立即被销毁。
只需在表单中有一个 Class1 类型的私有变量(在表单中调用它的构造函数)并使用它:

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

    private void button2_Click(object sender, EventArgs e) {
        _class1.AssignSeat();
        _class1.MSGbox();   
    }
}
于 2012-12-01T18:20:35.690 回答
0

尽管每次单击按钮时都会创建一个新对象,但要解决您的问题,请将其设为seats静态。

这是一个糟糕的设计,正如@JonSkeet 所说

于 2012-12-01T18:22:19.143 回答