我正在使用 TGridPanel 来管理多个面板。我使用以下代码创建面板并将它们添加到 GridPanel 中:
var
pnl: TPanel;
begin
pnl := TPanel.Create(GridPanel2);
pnl.Caption := 'Panel One';
pnl.Tag := 1;
pnl.Parent := GridPanel2;
pnl.Name := 'pnlOne';
GridPanel2.ControlCollection.AddControl(pnl);
pnl := TPanel.Create(GridPanel2);
pnl.Caption := 'Panel Two';
pnl.Tag := 2;
pnl.Parent := GridPanel2;
pnl.Name := 'pnlTwo';
GridPanel2.ControlCollection.AddControl(pnl);
pnl := TPanel.Create(GridPanel2);
pnl.Caption := 'Panel Three';
pnl.Tag := 3;
pnl.Parent := GridPanel2;
pnl.Name := 'pnlThree';
GridPanel2.ControlCollection.AddControl(pnl);
end;
您会注意到每个面板都有不同的标签值。
我想根据面板标签属性中的值从GridPanel中删除一个面板。我尝试了以下代码:
var
ii: integer ;
pnl: TPanel;
begin
for ii := 0 to GridPanel2.ControlCollection.Count -1 do begin
if GridPanel2.ControlCollection[ii].Control.Tag = 1 then begin
pnl := GridPanel2.ControlCollection[ii].Control as TPanel;
GridPanel2.ControlCollection.RemoveControl(pnl);
freeandnil(pnl);
end;
end;
gridpanel2.Refresh();
end;
只要该面板是集合中的最后一个面板,它就能正常工作。如果我尝试删除标签为1或2的面板,就会出现超出范围的错误。在调试器中点击“继续”会留下已删除面板的空白,但确实删除了面板。
我想看到的是,比如说删除第二个面板,并将随后的面板向下移动一个位置,以便不留下任何间隔。
我该如何做?
我正在使用Delphi 10.1 Berlin,如果有关系的话。
GridPanel2.ControlCollection.Count -1 downto 0
- Dalija Prasnikar