各位高手大家好:
  我用了 pagecontrol1一个组件,并且我静态定义了7个tabsheet,可是用户要求能关闭活页(但有要求)
,要求点击tabsheet时(就是刚创建tabsheet时上面有几个tabsheet1,tabsheet2,tabsheet3等放caption的信息的地方)
,关闭你所点击的那个活页。我做后只能关闭一个,而且关闭的活页头,与下面的内容不符,就是说我所关闭的内容却还在界面上,我的代码是:
procedure TForm1.PageControl1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  index : integer;
  a:integer;
begin
  P:=pagecontrol1.ActivePage.ClientToScreen(p);
 pagecontrol1.ActivePageIndex:=pagecontrol1.IndexOfTabAt(p.X,p.Y);
 a:=pagecontrol1.ActivePageIndex;
 pagecontrol1.ActivePage:=pagecontrol1.Pages[a];//我想把想删除的活页置为当前页然后在另一个按纽的功能输入
PageControl1.ActivePage.TabVisible := false;
 但是不能成功,我这个要求是,必须先找到tabsheet(就是你右键时,系统自动把你右键的tabsheet,默认为当前值)然后(右键时会弹出一个关闭此活页的窗口)点击关闭按纽,关闭此活页 。
   我的编程能力有限,写的代码总是不能成功,请高手帮我解决一下,谢谢了

解决方案 »

  1.   

    在FORM上放一个PopupMenu,PopupMenu内加个关闭菜单项,在其事件内加入:
      PageControl1.ActivePage.Free;然后将PageControl的PopupMenu设为你所放置的PopupMenu在PageControl的MouseDown事件内写如下代码:procedure TForm1.PageControl1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if(Button = mbRight) then
      begin
        PageControl1.ActivePageIndex := Pagecontrol1.IndexOfTabAt(X, Y);
      end;
    end;
      

  2.   

    form1.TabSheet1.TabVisible :=False;
      

  3.   

    我是静态创建的7个tabsheet啊,如果用PageControl1.ActivePage.Free;我还要看那怎么恢复啊?你可是彻底的释放了活页呀,我虽然释放了当前活页,我还取信息放到活页里的,这不行吧,form1.TabSheet1.TabVisible :=False;这个也不行吧,因为根本不知道用户会选择那个页面关上。,所以要判断。请高手再看看,有没有好办法啊?谢谢了?
      

  4.   

    procedure TForm1.PageControl1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if Application.MessageBox('是否删除?','提示',mb_yesno+mb_iconquestion)=idno then exit;
        PageControl1.Pages[PageControl1.IndexOfTabAt(x,y)].TabVisible :=false;
    end;
      

  5.   

    if(Button = mbRight) then
      begin
        PageControl1.ActivePageIndex := Pagecontrol1.IndexOfTabAt(X, Y);好象这个并没有起作用,因为我关闭的不是我右键所点击的窗口,而是关闭的真正的当前的窗口
      

  6.   

    是不是静态创建的tabsheet,不能按我的要求屏蔽掉啊?有那位高手看看啊?
      

  7.   

    各位高手,下面是我是的代码,就是达不到我想要的要求,(右键选择活页,将它设置成当前页,然后屏蔽掉,)我开始还可以屏蔽几个,但后面就不能屏蔽掉了。而且内容和活页头都错位了,请解决一下,谢谢了procedure TForm1.N2221Click(Sender: TObject);
    begin
     PageControl1.ActivePage.TabVisible := false;
    //PageControl1.ActivePage.Free; 不能用这个,因为我是静态的,这样释放了,那我再用就用不成了。
    end;procedure TForm1.PageControl1MouseDown(Sender: TObject;
     Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     begin
       if(Button = mbRight) then
     begin
       PageControl1.ActivePageIndex := Pagecontrol1.IndexOfTabAt(X, Y); end;
    end;