主要就是想实现如果符合条件,那么显示相应tabsheet
不符合就切换到上一个tabsheet用pagecontrol1.ActivePageIndex在button.click里面倒是可以切换可是放到tabsheetshow事件里面没用啊请问,有知道的吗?

解决方案 »

  1.   

    你对“事件”点没有把握好,
    你可以在formcreate或formshow中去处理这个事件。
      

  2.   

    你可以放在formshow中,应为TabSheetShow 比formshow先执行
      

  3.   

    不我是希望某些tabsheet可以不受限制的访问
    某些tabsheet需要密码访问,如果密码错误就切换到不受限制的tabsheet上去跟form事件什么关系?
      

  4.   

    并且tabSheetShow 是在切换不同的sheet时才起作用
      

  5.   

    那你可以在tabsheet中弹出窗口输入密码,正确就显示,否则就跳到不受限制的tabsheet上!
      

  6.   

    那要看你怎么使用了,如果你想在窗体已经创建了,在使用的过程中来判断是否需要转移到其它的tabsheet上,可以使用消息机制去做,下面是我简单写的一个代码,在界面上放一个Edit框,当显示第一个Tabsheet的时候通过判断edit框的值来决定显示哪一个,代码如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;const
      WM_showTabsheet=WM_USEr+10;type  TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        Edit1: TEdit;
        TabSheet3: TTabSheet;
        TabSheet4: TTabSheet;
        TabSheet5: TTabSheet;
        TabSheet6: TTabSheet;
        procedure FormCreate(Sender: TObject);
        procedure TabSheet1Show(Sender: TObject);
      private
        { Private declarations }
        procedure Showtabsheet(var Message: TMessage); message WM_showTabsheet;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      PC:PChar;
      P:Pointer;beginend;procedure TForm1.Showtabsheet(var Message: TMessage);
    begin
      if Message.Msg=WM_showTabsheet then
        self.PageControl1.ActivePageIndex:=Message.WParam;
    end;procedure TForm1.TabSheet1Show(Sender: TObject);
    var
      ActiveIndx:integer;
    begin
      ActiveIndx:=StrToint(Edit1.Text);
        postmessage(self.Handle,WM_showTabsheet,ActiveIndx,0);
    end;end.