두 listboxes.I 두 개의 목록 상자를로드하는 응용 프로그램에서 작업하고 있습니다 및 목록 상자에서 항목을 클릭하여 유지할 때 디버깅하는 동안 다음 오류가 나타납니다 . EXE 파일을 실행델파이 스택 오버플로 이벤트 처리에서 사이클로 인해
내가 "액세스 위반"메시지가 close.Sometimes에 응용 프로그램을 발생합니다.
그렇다면이 aaplication에서이 오류를 제거하려면 어떻게해야합니까?
EDIT
..
주요 형태는 모든 컨트롤 timer_RefreshCOntrol를 리프레시 타이머를 갖고 (intervali 1).
은 editBox_one가 수정 whenver (값) 이 기능은 내가 원래 개발자 아니다 FormCreate
EDIT2
에
Procedure TStringSetting.SetValue (const AValue : String);
Begin
...
If FValueControl <> Nil then
Begin
FValueControl.OnChange := VoidNotifyEvent;
FValueControl.Text := NewValue;
FValueControl.OnChange := EditChange; //<--here the stackoverflow error comes....
end;
end;
Procedure EditChange (Sender: TObject);
Begin
Value := FValueControl.Text;
If Not EditIsValid then FValueControl.Font.Color := clRed
else If Dirty then FValueControl.Font.Color := clBlue
else FValueControl.Font.Color := clWindowText;
If @OldCustomEditChange <> Nil then OldCustomEditChange(Sender);
end;`
the EditChange (Sender: TObject); <--keeps geting called and the stackoverflow error comes
EditChange
편집 3 호출 스택 값은 무엇이지만 "???" 내가 무한 호출이
Procedure TFloatSetting.EditChange (Sender: TObject);
Begin
SkipNextOnChange := True;
Inherited EditChange(Sender);
IfValidThenStore(FValueControl.Text);
Inherited EditChange(Sender); {<-------This is where it start}
end;
Procedure TStringSetting.EditChange (Sender: TObject);
Begin
Value := FValueControl.Text;
If Not EditIsValid then FValueControl.Font.Color := clRed
else If Dirty then FValueControl.Font.Color := clBlue
else FValueControl.Font.Color := clWindowText;
If @OldCustomEditChange <> Nil then OldCustomEditChange(Sender); {<---this keeps calling Procedure TFloatSetting.EditChange (Sender: TObject);}
end;
! 물론 Windows 목록 상자는 버그가 없습니다. 특정 코드를 보여줘야합니다. –
우선, 타이머를 사용하십시오 (특히 간격이 1 인 경우 - 초당 천 이겠지만 이는 TTimer로 얻을 수있는 것보다 훨씬 많으며 CPU 시간 낭비). 이것에 대해 끔찍한.아무튼, 대부분 자신이 호출하는 프로 시저 또는 첫 번째 프로 시저를 호출하는 다른 프로 시저가있을 가능성이 큽니다. 쉽게 찾을 수 있어야합니다. 아마도 EditChange가 호출되어 EditChange가 호출되어 EditChange가 호출되고 * ad infinitum *이 호출됩니다. 이것을 확인하려면'삑 '을 추가하십시오. sleep (1000)'을 사용하여 EditChange를 시작합니다. (계속) –
(계속) 나의 가설이 맞다면, 프로그램을 죽일 때까지 잠깐 비프 음을 울려 야한다. –