2010-08-12 5 views
4

자바 백그라운드에서 왔습니다. 콜렉션이 특정 행동을 지원하고, 세트가 다른 것을 가지고있는 인터페이스를 가진 데이터 구조를 가지고 있습니다.delphi 7 Items 프로퍼티

델파이에서 프로그래밍하는 동안 나는 벽돌 벽에 부딪쳤을 때 항목의 동작에 대한 반성을 묻는다면 매우 이상합니다. 어떤 종류의 메뉴는 메뉴 항목이 다른 하위 구성 요소를 포함하는 항목을 가지고 구성 요소입니다 예를 들어,이 코드는

 menuOfSomeKind.Items.Add(t); 

를 컴파일되지 않습니다.

동적으로 편집하려는 경우 추가 동작을 사용하여 '['expected 'but' 녹이다.

설명해 주시겠습니까?

답변

2

아마 menuOfSomeKindMainMenu.Items.Add(t);

+0

여기에서 만든 사용자 지정 구성 요소는 TMenuItem에서 상속 될 수 있습니다. 그리고 그것을 해결했습니다. 다른 개체를 보내는 행동을 설명해 주시겠습니까? – none

+0

MainMenu.Items는 TMenuItem 유형의 속성입니다. – Bharat

+1

@none : 개체가 명시 적으로 "추가"함수를 선언하면 "Add()"가 지원됩니다. 그들이하는 규칙은 없으며, 그렇게한다면 그렇게 할 수 있습니다. 일부는 함수 Add와 인덱스로 항목을 반환하는 인덱싱 된 속성 Items [Index]를 선언 할 수 있습니다. 다른 것은 프로퍼티 아이템만을 선언 할 것이지만, 그 프로퍼티는 인덱스되지 않을 것입니다. 대신에 WHICH는 Add와 [] (인덱스 된 접근)을 구현합니다. 두 번째 경우에는 Items [] 및 Items.Add를 수행 할 수 있습니다. 문서 또는 코드를 보거나 시도하는 것 이외의 다른 경우를 알 수있는 방법이 없습니다. – himself

0

하지 당신이 TMainMenu 사용에 항목을 추가하는 경우 TMenuItem 사용 MenuItem.Add(t);

에 항목을 추가하는 경우 TMainMenu

이 TMainMenu 차이있다 TMenuItem입니다/TMenu 및 TMenuItem 코드를 발표

var 
    mainMenu: TMainMenu; 
    menu: TMenu; 
    subMenu: TMenuItem; 
begin 
    //***** This creates a new root menu 
    mainMenu.Items.Add(TMenuItem.Create); 

    //***** Essentially the same as mainMenu 
    menu.Items.Add(TMenuItem.Create) 

    //***** This adds a new submenu to an existing menu 
    subMenu.Add(TMenuItem.Create); 

    //***** This adds a new submenu to the first submenu of an existing menu 
    subMenu.Items[0].Add(TMenuItem.Create); 
end; 

참고 컴파일하지만 실행시 사방에 예외를 throw합니다. 우선, 로컬 변수는 할당되지 않습니다.

+0

예를 들어 주셔서 감사합니다. 그 좋은 예입니다. – none