2009-08-14 5 views
0

나는 두 가지 형태를 가지고, 하나는 기본이고 다른 상속 폼 main.Lets 내가 기본 폼 함수가 있다고 가정 : 상속 된 폼에 있어야 기본 폼런타임에 생성 된 컨트롤을 상속하는 방법은 무엇입니까?

procedure FormMain.CreateButton; 
begin 
    with TsButton.Create(Self) do begin 
    Width := 31; 
    Height := 31; 
    Left := 31; 
    Top := 31; 
    Visible := true; 
    Parent := Self; 
    end; 
end; 

일반적으로 모든 것을하지만,이 내가하는 일이다 :

나는 mainForm에서 CreateButton을 호출하지만 버튼은 메인 폼에만있다.

해당 버튼을 상속하는 것이 가능합니까?

답변

4

디자인 타임과 런타임에는 차이가 있습니다. 양식 디자이너는 양식에 대한 정의를 작성하여 런타임에 인스턴스화합니다. 한 양식을 다른 양식에서 상속받는 경우 기본 서식 파일을 사용하여 추가합니다. 그러나 폼 디자이너 폼은 클래스 정의와 같은 템플릿 일뿐입니다.

이제 런타임시 기본 폼과 파생 된 폼을 인스턴스화하고 응용 프로그램의 리소스 섹션에 저장된 템플릿에서 인스턴스 폼을 만듭니다. 기본 폼의 인스턴스에 무언가를 추가하면 정의가 아닌 개별 인스턴스가 수정되므로 다른 인스턴스에 표시되지 않습니다. 폼에 버튼을 동적으로 추가하려면 해당 인스턴스 (이 경우 파생 된 폼)에 개별적으로 만들어야합니다.

2

"상속"을 의미하는 것이 일반적으로 의미하는 경우 대답은 아니오입니다. (정상적으로는 IDE에서 기본 폼을 만든 다음 IDE에서 해당 기본 폼의 하위 항목을 만들었습니다.)

이 경우 런타임에 생성 된 컨트롤은 상속 트리에 포함되지 않으며 그 자손은 그것에 대해 아무 것도 모른다. 자손에 동일한 코드를 수동으로 추가해야합니다.

정확히 달성하려는 것은 무엇입니까? 단추를 만들기위한 코드를 작성 했으므로 분명히 기본 및 자손 양식 모두에 단추가 필요할 것이라는 것을 미리 알고 있다면 조상에 단추를 실제로 드롭하지 않는 이유는 무엇입니까?

+0

예 - 표시해 놓고 보이지 않게하십시오. 원하면 언제든지 표시 할 수 있습니다. –

1

이것이 상속 된 것이라면 두 가지 양식에서 다른 것을 수행 할 방법이 없습니다. 따라서 런타임 변경 사항을 상속 받기를 원하지는 않습니다!

관련 문제