怎样隐藏已经公开的属性?(100分)

  • 主题发起人 主题发起人 donkey
  • 开始时间 开始时间
D

donkey

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我的控件继承自TWinControl,我想隐藏width 和 Height 属性,该怎样做?
 
继承不能隐藏width 和 Height 属性
 
如果能隐藏其他属性也好呀
 
一旦公开 就不能被隐藏了
兄弟 不要想了
 
其实可以通过下面的方法实现
只不过有两个缺点:
1、要想改变Width,Height只能通过自己的函数或强制转换成基类
2、控件的大小始终都是默认大小,只能通过运行时动态改变。

unit MyEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
TMyEdit = class(TEdit)
private
function GetWidth: Integer;
function GetHeight: Integer;
public
constructor Create(AOwner: TComponent); override;

procedure SetWidth(const Value: Integer);
procedure SetHeight(const Value: Integer);
published
property Height: Integer read GetHeight;
property Width: Integer read GetWidth;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Test', [TMyEdit]);
end;


{ TMyEdit }

constructor TMyEdit.Create(AOwner: TComponent);
begin
inherited;
SetWidth(250);
end;

function TMyEdit.GetHeight: Integer;
begin
Result := TEdit(Self).Height;
end;

function TMyEdit.GetWidth: Integer;
begin
Result := TEdit(Self).Width;
end;

procedure TMyEdit.SetHeight(const Value: Integer);
begin
TEdit(Self).Height := Value;
end;

procedure TMyEdit.SetWidth(const Value: Integer);
begin
TEdit(Self).Width := Value;
end;

end.
 
不可能的。
Object Pascal的对象继承性是子类可以直接赋值给父类。如
TA=Class
end;
TB=Class(TA)
end;
A : TA
B: TB;
则 A := B是成立的。
如果你在TB隐藏了属性(假如做得到),只要直接把它赋给一个TA类型的,就可以访问你隐藏的属性了
所以这样做是毫无意义的。
 
其实是因为我创建了一个子控件,我不希望某些特性出现在属性窗里,因为它的width和
height是固定的,不应该被修改
 
用空方法覆盖width和height属性的set方法,应该可以。

procedure TMyEdit.SetHeight(const Value: Integer);
begin
end;
 
>其实是因为我创建了一个子控件,我不希望某些特性出现在属性窗里,因为它的width和
>height是固定的,不应该被修改
那我的代码就能实现你这个目的了。
 
xianjun的方法很好!
 
多人接受答案了。
 
后退
顶部