本人在做一个复合控件,如何隐藏其中的一个控件??(急)(120分)

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

davidc

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想要做一个通过TLabel和TEdit复合控件,其中有一个ShowCaption属性,通过True
或False控制TLabel的Visible属性。
type
TCustomldEdit = class(TCustomControl)
private
FEdit: TEdit;
FLabel: TLabel;
......
FShowCaption: boolean;
procedure SetShowCaption(Value: Boolean);
protected
......
public
.....
published
....
property ShowCaption: Boolean read FShowCaption write SetShowCaption default true;
...........
end;

constructor TCustomldEdit.Create(AOwner: TComponent);
const
Gap = 5;
begin
inherited Create(AOwner);
Width := 131;
Height := 50;

FLabel := TLabel.Create(Self);
FLabel.Parent := Self;
FLabel.Caption := 'MyEdit';
FLabel.Left := Gap;
FLabel.Top := Gap;
FLabel.Width := 55;
FLabelWidth := FLabel.Width;
FLabel.Height := 15;

FEdit := TEdit.Create(Self);
FEdit.Parent := Self;
FEdit.Left := FLabel.Left;
FEdit.Top := FLabel.Top + FLabel.Height + Gap;
FEdit.Width := Width - FEdit.Left - Gap;

FShowCaption := true;
end;

procedure TCustomldEdit.SetShowCaption(Value: Boolean);
var
oShow:boolean;
begin
oShow := FShowCaption;
FShowCaption := Value;
if FShowCaption = oShow then exit
else begin
FLabel.Visible := FShowCaption;
showmessage('Run');
end;
end;

在编程时改变该控件的ShowCaption属性时,能够看到ShowMessage('Run'),但是Label
始终没有隐藏,请各位大虾不吝指教。

 
procedure TCustomldEdit.SetShowCaption(Value: Boolean);
var
oShow:boolean;
begin
oShow := FShowCaption;
FShowCaption := Value;
if FShowCaption = oShow then exit
else begin
FLabel.Visible := FShowCaption;
showmessage('Run');
end;
end;
这段程序很别扭也
 
procedure TCustomldEdit.SetShowCaption(Value: Boolean);
begin
if FShowCaption <> Value then
begin
FShowCaption := Value;
FLabel.Visible := FShowCaption;
showmessage('Run');
end;
end;

这样看起来舒服一些吧。
至于编程时候为什么看到还是Visible,也不奇怪。
你在Form上放一个Label,设置成Visible=false,
它还是看得到。要是看不到了,那不就麻烦了?
 
不好意思,一时脑子没有转过弯,让大家见笑了。至于我为什么这么写程序,只是因为
需要通过oShow变量作另外一些设置,贴帖子的时候把另外一些代码省略了,所以程序有
些别扭。
 
多人接受答案了。
 
后退
顶部