为何无法给自定义控件的对象属性付值?(100分)

  • 主题发起人 主题发起人 lmtfw
  • 开始时间 开始时间
L

lmtfw

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了个控件从DBCHART继承,声明了个TCOMBOBOX类的内部变量FCOMBOLX,它的相应属性是
COMBOLX,其中定义了COMBOLX的存取方法,可是就无法对其付值,各位帮我看看

unit vdbChart;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, TeeProcs,
TeEngine, Chart, DbChart, Graphics, Forms,
Dialogs, DB, DBTables, StdCtrls, Series, dxExEdtr, dxDBTLCl, dxGrClms, dxTL, dxDBCtrl, dxDBGrid,
dxCntner;

type
tvdbChart = class(tdbChart)
private
fcombolx:TComboBox;

{ Private declarations }
protected

{ Protected declarations }
public
procedure setfcombolx(value:tcombobox);
{ Public declarations }
published
combolx:tcombobox read fcombolx write setfcombolx ;
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('SAMPLE', [tvdbChart]);
end;

{ tvdbChart }


procedure tvdbChart.setfcombolx(value: tcombobox);
begin
if assigned(value) then
fcombolx.Assign(value);
end;

end.
我在主程序中使用的时候付值
procedure TForm1.Button2Click(Sender: TObject);
begin
DBCHART1.combolx:=combobox3;
end;
可是值只付给了COMBOLX,而FCOMBOLX却是空的,我跟踪了一下,SETFCOMBOLX好象更本没有
运行过。这是怎么回事啊?

 
直接用fcombolx := Value 记录指针就行了
然后在FCombolxFree的时候通知一下,所以应该这样写:
procedure tvdbChart.setfcombolx(value: tcombobox);
begin
if fcombolx <> Value then
begin
FCombolx := Value
if Assign(value) then
Value.FreeNotification(Self);
end;
end;
procedure tvdbChart.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FCombolx) then
FCombolx := nil;
end;
 
xianjun:
不行啊,我发现在外部付值的时候SETFCOMBOLX过程根本没运行过
如:DBCHART1.combolx:=combobox3;//给COMBOLX付值的时候我检查SETFCOMBOLX过程并没有
执行啊,这是怎么回事啊?
 
终于自己找到原因了,原来PUBLISHED的属性后忘了加关键字:PROPERTY
NND我真是太粗心了。
 
虽然是自己解决的但还是要谢谢你
 
接受答案了.
 
后退
顶部