如题:
TwinControl 中protected 方法SelectNext(),可以在Form1中方法, 但Panel1中不能访问?
 (1)form1和panel1都是Twincontrol的派生类;
 (2)按"protected属性的成员称为保护成员,被定义的类成员在该类的方法中可被访问,它的子类和后代类也可以访问"的说法,
    TwinControl 中protected 方法SelectNext(),在Form1,panel1中都可以访问的?

解决方案 »

  1.   

    提问题时要表述清楚自己的问题。我猜测你想访问Form1和Panel1的SelectNext()类方法的地方,是在Form1的一个类方法中进行的,并且,Panel1控件是Form1的一个类成员。如果是我猜想的这种情况,Panel1的SelectNext()当然不能被访问。因为Form1的类方法,对于类实例Panel1来说,是外部的,肯定不能访问TPanel类的protected类成员。而TForm的类方法,是可以访问TForm的protected类成员的。
      

  2.   

    soryy,没把问题清楚,谢谢你的回复,
      我是在做一个控件;想访问SelectNext()方法;
      遇到的问题是这样的:
        (1)SelectNext()是TWinControl定义的protected方法;(用于转移焦点)
        (2)而Tfrom, Tpanel都是TWinControl的派生的子类;
       (3)From1.selectNext()可以; 而Panel1.selectNext()就不行;
       
        虽然Panel1是在Form1中,但它们是各自己的实例访问各自父类的seclectNext();
        不知道我理解的对不对?   
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Self.SelectNext(Nil, False, False);  //正确,可行
    {
      因为 procedure TForm1.Button1Click() 是TForm1的类方法,所以上面的调用是可以的。
    }  Panel1.SelectNext(Nil, False, False); //错误,不行
    {
      因为 procedure TForm1.Button1Click() 对于TPanel类来说,是外部的,所以不能访问TPanel类中被保护的类方法。
    }
    end;end.