我有一个带有一些构造函数的类,一个带有命令按钮的表单和一个在我的“form.cs”中设置为20的公共变量。每次点击按钮直到它变为零,我怎么能减少变量?我尝试了一些方法,比如click事件中的循环,构造函数中的简单演绎(变量=变量-1),但它们不起作用! 试过这个:
public void AssignSeat()
{
seats = seats - 1;
}
然后
private void button2_Click(object sender, EventArgs e)
{
Class1 Class1 = new Class1();
Class1.AssignSeat();
Class1.MSGbox();
}
它编译并运行没有错误但它永远不会停止!
答案 0 :(得分:4)
下面:
Class1 Class1 = new Class1();
Class1.AssignSeat();
Class1.MSGbox();
...每次点击按钮时,您都会创建Class1
的新实例。 button2_click
方法是否已在Class1
范围内?如果是这样,您只需要调用AssignSeat
- 您不需要创建表单的新实例。
(我也强烈建议反对公共变量,但这是另一回事。)
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
虽然每次单击按钮时都在创建新对象,但要解决问题,请将seats
设为静态。
这是一个糟糕的设计,正如@JonSkeet所说
答案 3 :(得分:0)
宣布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());
}
}