解决方案 »

  1. cvm
  2. 首先,不知道你的思路和设计思想是什么?最好和大家分享一下,说不定有更好的方法!如果有多个页面,页面不可切换,那么就要显示其中的一个页面,也就是rzpagecontrol1.ActivePage:=TabSheet1;(加入第一个页面需要显示,TabSheet2,TabSheet3不可以切换),rzpagecontrol1有一个事件是TabClick,可以在里面设置,不能将TabSheet2,TabSheet3 Enabled=False,还是可以点击,不过点击时会自动切换到TabSheet1上,但是会有闪烁,基本可以达到你的要求,还需要完善procedure TForm1.RzPageControl1TabClick(Sender: TObject);
    begin
      if rzpagecontrol1.ActivePage=TabSheet1 then
        ShowMessage('1');  if rzpagecontrol1.ActivePage=TabSheet2 then
        rzpagecontrol1.ActivePage:=TabSheet1;  if rzpagecontrol1.ActivePage=TabSheet3 then
        rzpagecontrol1.ActivePage:=TabSheet1;
    end;
      

  3. 刚才看了一下,在TabSheet1页面有Enabled属性,直接设置为False,该页面虽然可以点击,但控件不能使用,可以达到要求。
      

  4. 第二个问题:rzpagecontrol的TabSheet关闭时是默认按照ActivePageIndex的递减顺序来显示激活页面的,比如说:当前激活页面的ActivePageIndex是3,当关闭当前页面时,默认激活的页面就是ActivePageIndex=2,以此类推,如果关闭的激活页面是ActivePageIndex=0的话(也就是第一个页面默认激活),则关闭后原来的第二个页面变成激活页面,此时第二个页面的ActivePageIndex会由1变成0,另外:程序上的关闭页面并不是从设计上直接删除的,重新运行还会出现。
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      RzPageControl1.CloseActiveTab;
      ShowMessage(IntToStr(RzPageControl1.ActivePageIndex)+'_'+RzPageControl1.ActivePage.Caption);  {关闭页面后的当前激活页面索引和名称}
    end;procedure TForm1.RzPageControl1Close(Sender: TObject;
      var AllowClose: Boolean);
    begin
      AllowClose:=True;
      ShowMessage(IntToStr(RzPageControl1.ActivePageIndex)+'_'+RzPageControl1.ActivePage.Caption);{关闭的当前激活页面的索引和名称}
    end;
      

  5. 可以在切换事件里取消切换
    其实,最好就是无标签的,切换由程序进行——win31页里的Tnotebook就是这样
      

  6. to yct0605 我按照你的说法试了,效果是里面的控件无法使用但可以切换页面,这跟我的需求正好相反,我的需求是不能让用户切换页面但是可以用当页里面的控件。麻烦再帮看看,谢谢
      

  7. 1.如何设置PageControl1的页面不可切换?我试了把PageControl1.Enabled:=false;后发现当页面里的控件都无法使用了,我只想将页面设置成不能切换但当页面里的控件能够正常使用,该如何实现?这个问题还是没解决,哪位高手能帮想想办法,谢谢!
      

  8. 貌似这个问题还真是不好解决啊,2#的方法在进行tab页面切换点击的时候强制激活指定的页面,但是会有闪烁的,除非自己改写控件。
    procedure TForm1.RzPageControl1TabClick(Sender: TObject);
    begin
      {强制激活第一个页面}
      if rzpagecontrol1.ActivePage=TabSheet1 then
        rzpagecontrol1.ActivePage:=TabSheet1;  if rzpagecontrol1.ActivePage=TabSheet2 then
        rzpagecontrol1.ActivePage:=TabSheet1;  if rzpagecontrol1.ActivePage=TabSheet3 then
        rzpagecontrol1.ActivePage:=TabSheet1;
    end;