Delphi 如何使新(动态)选项卡成为活动页面

Delphi 如何使新(动态)选项卡成为活动页面,delphi,lazarus,Delphi,Lazarus,我给Lazarus和Delphi贴上了标签,因为到目前为止,我所做的一切似乎都很相似(100%)。但我的开发平台是Lazarus 我正在动态创建一个选项卡工作表,如下所示: procedure TForm1.cmdTabButtonClick(Sender: TObject); var NewTab: TTabSheet; begin NewTab := TTabSheet.Create(PageControl1); NewTab.PageControl:= PageControl1

我给Lazarus和Delphi贴上了标签,因为到目前为止,我所做的一切似乎都很相似(100%)。但我的开发平台是Lazarus

我正在动态创建一个选项卡工作表,如下所示:

procedure TForm1.cmdTabButtonClick(Sender: TObject);
var
  NewTab: TTabSheet;
begin
  NewTab := TTabSheet.Create(PageControl1);
  NewTab.PageControl:= PageControl1;
  NewTab.Caption:='hi';
//  NewTab.TabVisible:=true;
//  newtab.SetFocus;
end;
将对过程中的最后两行进行注释。没有它们,代码可以工作,但新选项卡不是最上面的选项卡。我必须点击它,它才会出现在顶部

但是如果我取消注释这两行,程序就会崩溃,说明一个看不见的对象不能有焦点

关于如何解决这个问题有什么建议吗


非常感谢

您需要设置页面控件的
ActivePage
属性。像这样:

PageControl.ActivePage := NewTab;

PageControl具有属性
ActivePage
ActivePageIndex
,您可以使用这些属性进行此操作<在这种情况下,code>ActivePage是最方便的,因为您只需调用

PageControl1.ActivePage := NewTab;

谢谢你。但我的问题是,由于创建了许多选项卡,所以我没有按名称跟踪选项卡表。那么,有没有办法解决这个问题,或者我应该为每个页面指定一个名称?@itsols:对您希望通过代码激活的选项卡使用不同的变量(而不是重用NewTab),如果您需要在代码中进一步访问它们,则将它们全部放在一个数组中,任何事情都由您决定。或者使用它们的索引并使用ActivePageIndex,正如我在回答中提到的。感谢所有的投入!创建需要激活的页面时,将其设为活动页面。我认为您不需要设置名称,甚至不需要将所有新页面保存在一个数组中。但这完全取决于您选择活动页面的标准。没有这些知识,很难给你一个规定性的解决方案。