2009-08-25 3 views
0

내가 양식의 배열 하나 인 폼에서 전역 변수에 액세스하려고, 나는 시도 전역 변수 (델파이)에 값을 할당 :하지 않습니다 위의이 사용

max_forms := 3 

setlength(form_array, max_forms); 

form_array[1] := frm1; 
form_array[2] := frm2; 

if current_form > 0 then 
begin 
    form_array[current_form].fNumber := Number; 
    form_array[current_form].ShowModal; 
end; 

을 분명히 일한다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

올바르게 작동하지 않는 부분은 분명하지 않습니다. 컴파일 오류가 발생합니까? 또는 당신이 달릴 때 그것은 부서 지는가? 어떤 변수가 무엇이고 어떻게 정의되는지 설명해 주시겠습니까? –

+1

배열 범위 검사 문제를 방지하려면'current_form

+0

안녕 미안 해요, 조금 확장하기 나는 모든 하위 양식에 FNumber라는 전역 변수가 있습니다.이 변수는 기본 폼에서 수행해야합니다. 부속 양식 번호는 데이터베이스에 저장된 값에 따라 다 (니다. 나는 코드를 실행하지 않았지만 form_array [current_form] 뒤에 드롭 다운에 FNumber가 나타나지 않기 때문에 잘못 알고있다. –

답변

2

문제는 fNumber에 개인 액세스 권한이 있다는 것입니다.

form_array[current_form].Number := Number; 

소개 글로벌 :

property Number: Integer read FNumber write FNumber; 

그런 다음 당신이 임무를 수행 할 수 있습니다이 필드의 목적에 따라

, 하나 개의 솔루션은 쓰기 액세스 할 속성을 만들 수 있습니다 변수 :

실제로 문제가있는 경우 FNumber은 "글로벌"변수이며, 잘못된 단어를 사용하고 있습니다. FNumber은 필드이며 양식에 속합니다. 양식 회원은 글로벌 회원이 아닙니다.

양식 원본을 확인하십시오. 이 모든 클래스 단위의 인터페이스와 외부에 존재하기 때문에,

end; // End of TForm1 

var 
    Form1: TForm1; 

implementation 

Form1 실제 전역 변수이고 당신은 할 수 있습니다 : 그것은 델파이 IDE에 의해 생성되어있는 경우는 그 아래에 변수 선언을 찾을 수 있습니다 어디서든 액세스 할 수 있습니다 (일반적으로 좋은 것은 아닙니다). FNumber과 같이 먼저 양식 인스턴스에 액세스해야합니다.

추신 : 정확한 시도가 무엇인지 알 수는 없지만 액티브 폼 목록을 제공하는 Screen.Forms을 살펴 보시기 바랍니다. 그것은 맞춤 목록보다 더 적합 할 수 있습니다.

+0

그래요, 전에 제가 실제로 사용했던 적이 없어요 (저는 여전히, 초보자입니다) 어떤 장치를 설치해야하는지에 대한 아이디어가 있습니까? –

+0

귀하가 액세스하는 필드와 동일한 클래스에 있어야하며, 귀하의 경우에는 양식과 공공 부분에 있어야합니다. –

+0

속성 키워드에 대한 설명 : http://www.delphibasics.co.uk/RTL.asp?Name=Property –

1

양식의 Tag 속성을 사용하도록 코드를 변경하십시오. 정수 값을 저장하거나 개체 (.tag : = integer (MyObject)) 및 정수를 저장할 수있는 스크래치 패드 ...

max_forms := 3 

setlength(form_array, max_forms); 

form_array[1] := frm1; 
form_array[2] := frm2; 

if current_form > 0 then 
begin 
    form_array[current_form].Tag:= Number; 
    form_array[current_form].ShowModal; 
end; 
관련 문제