如果在tab上放一个控件,如EDIT。当调用Edit.Show时,pagecontrol就会自动跳到该页。是否有办法组织此现象发生呢?

解决方案 »

  1.   

    很少用到edit1.show的用法。自己做一个ShowControl(ctrl)函数:
    如果ctrl的parent们里有是一个非激活的page,则不show
      

  2.   


    if pagecontrol1.activePage=edit.parent then edit.show;这样不知道符合你要求不。
      

  3.   

    function ShowEdit(EDIT: TEdit): Boolean;
    begin
      Result := (EDIT.Parent is TTabSheet) and (EDIT.Parent = pgc1.ActivePage);
      if Result then
      begin
        EDIT.Show;
      end;
    end;
      

  4.   


    pgc1是TPageControl控件名
      

  5.   

    貌似都错了,我来讲下为什么会出现这个现象:看TControls.Show就可以知道,控件再show的时候,会递归调用到父控件的Show的。因此放在page上的控件,在show时,就一定会调用到page.show。从而,即使当前页不是page,也会自动跳到page这页。现在已经解决了,看看大家还有些什么方法。
      

  6.   

    只是要知道你的edit怎么和tab对应,可以在edit的tag中对应tab页的index
      

  7.   

    那你对TEdit:
    override的TControls的Show方法就可以
      

  8.   

    我说了只是举例。。那panel呢?combobox呢?listbox呢?全部覆盖?呵呵
      

  9.   

    跳转是阻止不了的,除非你不想Edit显示出来
      

  10.   

    我现在的方法是,在show东西前,在pagecontrol的事件的onchanging事件里挂个函数,禁止跳转,完了再卸掉这个事件,就行了。
      

  11.   

    procedure TForm1.PageControl1Changing(Sender: TObject;
      var AllowChange: Boolean);
    begin
    end;在这个事件里面控制AllowChange变量。
      

  12.   

    var
      WC:TWinControl;
    WC:=Edit.parent;
    edit.parent:=Nil;
    edit.Show;
    Edit.parent:=Wc;