我有一个for
循环,每次通过我调用相同的方法。我需要找到一种方法来了解之前的等式是什么。我必须在不使用增量值的情况下找到它。例如:
for (int i = 0; i < 101; i++) {
checkBox[i].Click += new System.EventHandler(checkBoxMethod); }
在这种情况下,应该以某种方式checkBoxMethod
获得前一个函数,例如:
checkBox[50].Click
在 for 循环内部,还要设置每个复选框的标签。我假设您在这里使用的是 Windows 窗体。所以,这是修改后的 for 循环的样子:
for (int i = 0; i < 101; i++) {
checkBox[i].Click += new System.EventHandler(checkBoxMethod);
checkBox[i].Tag = i;
}
然后在您的事件处理程序中,您可以将 sender 变量转换为一个复选框,如下所示:
void checkBoxMethod (object sender, EventArgs args)
{
CheckBox box = (CheckBox)sender;
int number = (int)box.Tag;
}
在创建该复选框的事件处理程序时,无论“i”是什么,都将在变量“number”中检索,您可以随意使用它。
不要使用for
循环,而是使用递归并将当前计数传递给函数:
void checkBoxMethod (object sender, EventArgs args)
{
CheckBox box = (CheckBox)sender;
int number = (int)box.Tag;
myRecursiveMethod(number);
}
private void myRecursiveMethod(int count)
{
//do whatever stuff I need to do
if (!timeToExitTheMethod)
myRecursiveMethod(count++);
}
您没有向我们解释您在循环中到底在做什么,而且for
您的问题没有多大意义(即您提到的 CheckBox 是什么?),所以我不能对我的代码非常具体例子。请注意,您必须为递归方法编写一个退出点(否则它将被调用,直到出现堆栈溢出)。
如果您只是想计算调用函数的次数,请执行以下操作:
public class MyClass
{
private int _myCounter = 0;
void checkBoxMethod (object sender, EventArgs args)
{
CheckBox box = (CheckBox)sender;
//do whatever you need to do
_myCounter++;
}
}
如果您对您的要求更具体,那么我们可以更具体地提出我们的建议。
您可以使用 lambda experssions 将所需的信息传递给处理程序。
for (int i = 0; i < n; i++) {
int number = i;
buttons[i].Click += (sender, args) => OnButtonClick(sender, args, number);
}
...
private void OnButtonClick(object sender, RoutedEventArgs e, int number) {
MessageBox.Show(number.ToString(CultureInfo.InvariantCulture));
}