2012-05-27 2 views
1

У меня есть цикл for, и каждый раз я вызываю тот же метод. Мне нужно найти способ узнать, что такое предыдущее уравнение. Мне нужно найти это без использования значения инкремента. например:Как узнать, какой метод работает во время цикла for?

for (int i = 0; i < 101; i++) { 
    checkBox[i].Click += new System.EventHandler(checkBoxMethod); } 

Как-то checkBoxMethod должен получить предыдущую функцию в этом случае, например:

checkBox[50].Click 

ответ

1

Внутри для цикла, а также установить метку каждого флажка. Я предполагаю, что вы используете Windows Forms здесь. Итак, вот что модифицированный цикл будет выглядеть так:

for (int i = 0; i < 101; i++) { 
    checkBox[i].Click += new System.EventHandler(checkBoxMethod); 
    checkBox[i].Tag = i; 
} 

Тогда в обработчике событий вы можете привести переменную отправителя к флажку так:

void checkBoxMethod (object sender, EventArgs args) 
{ 
    CheckBox box = (CheckBox)sender; 
    int number = (int)box.Tag; 
} 

Что бы «я» был в время создания этого обработчика события checkbox будет извлекаться в переменной «number», и вы можете использовать его, как хотите.

+0

Как я могу выполнить «обработчик событий», вы можете передать переменную отправителя флажку, отбросив свойство тега флажка до целого числа «эта часть? Извините, мне просто нужно немного больше инструкций –

+0

Нет проблем, я разъяснил выше. –

0

Вместо использования 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 петли и ваш вопрос не имеет большого смысла (т. е. что вы делаете с CheckBoxes?), поэтому я не могу быть очень конкретным с моим примером кода. Обратите внимание, что вам придется закодировать точку выхода для рекурсивного метода (иначе он будет вызываться до тех пор, пока вы не получите переполнение стека).

Если вы просто хотите посчитать, сколько раз функция была вызвана, то сделать это:

public class MyClass 
{ 
    private int _myCounter = 0; 

    void checkBoxMethod (object sender, EventArgs args) 
    { 
     CheckBox box = (CheckBox)sender; 

     //do whatever you need to do 

     _myCounter++; 
    } 

} 

Если быть более точным с вашими требованиями, то мы можем быть более точным с нашими предложениями.

0

Вы можете передать необходимую информацию обработчику с использованием лямбда-выходов.

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)); 
    } 
Смежные вопросы