먼저 넷 전체를 살펴본 결과 동적으로 생성 된 메뉴 항목을 삭제할 수 없습니다. Delphi XE 사용. 나는 (운동 SubMenuName의 목적을 위해 'Test1을'이다, 따라서 항목을 작성합니다.델파이에서 동적으로 생성 된 메뉴 항목을 삭제할 수 없습니다.
MenuItemCreated := TMenuItem.Create(PopupMenu1);
MenuItemCreated.Caption:= SubMenuCaption
MenuItemCreated.Hint := SubMenuHint;
MenuItemCreated.Name := SubMenuName;
MenuItemCreated.OnClick := SubMenuClick;
MenuItemCreated.AutoHotkeys := maManual;
MySubMenu.Add(MenuItemCreated);
이 하위 메뉴 (들) 생성을 사용하여 아무런 문제가 없다가 정상적으로 작동하고, 나는 식별 SubMenuClick 절차 .
// Get rid of the menu items created
While MySubMenu.Count > 0 do
begin
Itemtodelete := MySubMenu.Items[0];
FreeandNil(ItemtoDelete);
end;
내가 넣어 가지고 : 거기에 너무 문제없이 올바른 하위 메뉴 항목은 내가 다음 일은 (나는 많은 변화를 시도하고 있지만)이 코드를 사용하여 동적으로 생성 된 하위 메뉴를 해제하도록되어 응용 프로그램 로그 아웃이다 showmessage()에서 디버그 라인은 freeandnil'd 인 메뉴 아이템의 컴포넌트 이름을 보여 주며 내가 기대했던 것, 즉 'Test1'과 내가 만든 다른 것들 디. 그런 다음 내 응용 프로그램에 다시 로그인합니다 (아직 실행 중이지만 로그 아웃 상태 인 경우). 그런 다음 소프트웨어는 이름이 같은 동일한 하위 메뉴를 다시 만들려고합니다 (응용 프로그램과 관련하여 변경된 사항이 없으며 이전에 (아마도 가정용으로) 처분 되었음). 나는 즉시 제기 된 예외를 얻을 :
오류 : Test1을 명명 된 구성 요소는 이미 내가 나중에 같은 이름을 다시 만들 수 있도록 하위 메뉴 항목을 처리하는 방법에 대한 완전한 딱하다
존재한다.
도움을 주시면 감사하겠습니다.
감사합니다,
톰, 감사합니다. MySubMenu는 PopupMenu1의 메뉴 항목입니다. MySubMenu.Clear; 여전히 같은 오류가 발생합니다. 오류 : 하위 메뉴 항목을 다시 만들려고하면 구성 요소 Test1이 이미 존재합니다. mi : = MySubMenu.Items [0]; mi.Free; 나는 이전에 이것을 시도했지만 하위 메뉴 항목을 다시 만들려고 할 때 여전히 오류가 발생합니다. Mike, MySubMenu.Clear가 컴파일되지만 하위 메뉴 항목을 다시 만들 때 동일한 오류가 반환됩니다. 이전에 MySubMenu.Delete (0)을 시도했지만 하위 메뉴 항목을 다시 만들 때 동일한 오류가 발생합니다. – user3698371
처음에 항목의 이름을 지정하는 이유는 무엇입니까? 혹시 FindComponent ('Test1')를 부르는가? 그렇지 않다면 이름은 중요하지 않습니다. 이름을 비워 두는 것이 가장 좋습니다. 이름으로 메뉴 항목을 살펴 본다면, 충돌하는 이름으로 다른 구성 요소를 찾아서 그것에 대해 뭔가 할 필요가 있습니다. 예를 들어 모든 것을 더 의미있는 이름으로 지정하십시오. - Rob Kennedy 43 분 전 – user3698371
Rob, 댓글에 'Answer'(틀 렸습니다)를 삭제했기 때문에 귀하의 코멘트를 다시 삽입했습니다. 삭제하기 전에 댓글을 달았습니다. 혼란에 사과드립니다. – user3698371