2012-05-27 5 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; 
} 

을 그래서, 여기 같을 것이다 루프 수정 된 것입니다 그 체크 박스의 이벤트 핸들러를 생성하는 시간은 변수 'number'에서 검색 될 것이고 원하는대로 사용할 수 있습니다. 대신 재귀를 사용하고 함수에 현재 카운트를 통과하는 for 루프를 사용

+0

"이벤트 처리기를 사용하면 체크 박스의 태그 속성을 정수로 변환 할 수 있습니다."이 부분에서 어떻게 할 수 있습니까? 죄송합니다. 좀 더 지시가 필요합니다. –

+0

위의 내용을 명확히합니다. –

0

: 당신이 우리에게 정확히 의 아무런 설명도 주어지지 한

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++; 
    } 

} 

그때 우리는 우리의 제안을 구체적 할 수 있습니다.

0

람다 익스텐션을 사용하여 필요한 정보를 처리기에 전달할 수 있습니다.

관련 문제