메신저에서 보면 TreeView에서 subitem을 더블클릭하면 대화창이 여러개 생성되자나요....
미리 디자인한 폼을 여러개 띄우고 제어할려고 하는데 폼을 어떤식으로 생성하고 제어해야 할지
잘 모르겠어요...
일단 아이디를 할당해줘야 할것 같은데...
고수님들 좀 알려주세요....
좀 상세히 설명 좀 부탁드리겠습니다....
참 그리고 리스트는 TreeView를 써도 괜찮을지 아니면 ListBox를 써야 할지 어떤게 제어하기 편할까요...
대신 메인 아이템과 서브 아이템이 들어가야 하거든요....
우리는 그 객체를 통해 해당 컴포넌트에 접근할 수 있게 하시면 됩니다..
다음은 동적으로 여러개 생성된 TLabel을 관리 하는 예제입니다.. 폼도 기본 로직은 같으니 참고 하세요..
(전에 답변해놓은 게 있어서 긁어서 올립니다 여기서 LabelManagerList가 제가 선언한 관리 객체이고..식별자는 Name으로 했습니다... )
-----------------------------
var
tempLabel : TLabel;
Loop : integer;
begin
for Loop := 0 to 2 do // 세개 만들다고 할때
begin
tempLabel := TLabel.Create(nil);
tempLabel.parent := Self; // Label의 Parent 윈컨트롤 지정..Label이 어느놈 위에 나타나는가..
tempLabel.Caption := 'aaaaa';
tempLabel.Left := Loop * 40;
......
end;
end;
근데 이런식으로만 해주면 다른 함수에서 라벨에 접근하기도...힘들고 하고 나중에 Free를 해줄 수 없으므로..
전역으로 LabelManagerList : TStringList;
를 선언하시고 FormCreate할때 TSTringList(LabelManagerList := TStringList.create) 를
생성해주시고요....
var
tempLabel : TLabel;
Loop : integer;
begin
for Loop := 0 to 2 do // 세개 만들다고 할때
begin
tempLabel := TLabel.Create(nil);
tempLabel.parent := Self; // Label의 Parent 윈컨트롤 지정..Label이
어느 놈 위에 나타나는가..
tempLabel.Name := 'MyLabel' + IntToStr(Loop); //이름을 구분자로 사용할 경우
tempLabel.Caption := 'aaaaa';
tempLabel.Left := Loop * 40;
......
LabelManagerList.addObject(tempLabel.Name,tempLabel);
end;
end;
일케 해시고요 접근하실때는
TLabel(LabelManagerList.Objects[LabelManagerList.IndexOf('MyLabel1')]).Caption := 'ccccc';
뭐 이런식으로 접근하시고요...
프로그램 끝낼때
var
Loop : integer;
begin
for Loop := LabelManagerList.count - 1 downto 0 do
begin
TLabel(LabelManagerList.Object[Loop]).Free;
end;
LabelManagerList.Free;
end;
이런식으로 해주시면 되요..