내 머리를 찢어 버린 후 며칠 만에 문제가 간단 해졌습니다 (중요한 비트 만 남겨 두었습니다. 내 많은 편집 내역을 참조하십시오). 그것은 :델파이에서 연속적이지 않은 범위 때문에 트리거하지 않는 FOR-IN 루프
showmessage('i='+inttostr(i));
for i in [2..5,8,11..13] do
showmessage('1');
showmessage('i='+inttostr(i));
이 항목은 내 프로그램에서 delphi로 무작위로 배치됩니다. 비 연속적인 for-in 루프 범위는 다른 곳에서 프로그램에서 작동한다는 점에 유의해야한다고 생각합니다. 합계로, 나는 같은 두 가지 비 연속적인 for-in loops
을 가지고 있는데, 다른 하나는 잘 동작한다고 주석을 달았지만 둘 다 동시에 작동하는 상태라면 두 번째 제품 만 작동하고 첫 번째 제품은 작동합니다. 아래에 설명 된 것과 같습니다.
첫 번째 메시지 상자에는 초기화되지 않았기 때문에 "i = 임의 번호 :"이 포함되어 있으므로 필요하지 않습니다. 메시지 상자에 "1"이 표시되지 않습니다. 표시되는 두 번째 메시지 상자에는 "i = 14"가 표시되어 루프가 트리거했지만 아무것도하지 못했음을 의미합니까? 그건 말도 안돼, 만약 누군가가 내게 계몽 수 있다면 두 가지를 원한다 :
1) 왜 이런 일이 일어나는가?
2) 문제를 해결하고 나중에 피하는 방법은 무엇입니까?
아마 당신의 상태가 "아닙니다 (somearr [1]은 Tcheckbox와 같습니다)."는 결코 사실로 평가되지 않습니다. 인덱스 1에있는 somearr에게 실제로 의도 한 것이 었는지 확인하십시오. –
문제가 반복적이지 않아서 somearr에 기대하는 바가 있는지 확인해야합니다. – crefird
외부의'case'가 필요 없다면, 테스트에서 제거하십시오.'for i : = 1 to 10 do' 대신에 루프를 제거하십시오. 문제를 나타내는 최소한이지만 완전한 * 예를 제공해주십시오. 일어날 것으로 예상되는 것을 표시하고 대신 일어날 것을 관찰하십시오. 메시지 박스를 간단한'WriteLn' 호출로 대체하면 예상되는 결과를 한꺼번에 쉽게 설명 할 수 있습니다. –