控件属性的设置问题 ( 积分: 50 )

  • 主题发起人 主题发起人 阿黛
  • 开始时间 开始时间

阿黛

Unregistered / Unconfirmed
GUEST, unregistred user!
控件的属性设置时有的用Read FOnDataSet Write FOnDataSet,有的时候用Read FDataset Write SetDataSet。
 
控件的属性设置时有的用Read FOnDataSet Write FOnDataSet,有的时候用Read FDataset Write SetDataSet。
 
前面的事件, 后面的是属性
 
比如有一个鼠标按下的事件,

比如有个属性

property OnClick : Txxx read FOnClick write FOnClick;

对应就有个变量
FOnClick: Txxx
当你在属性里面上双击OnClick,那么在乎格FOnClick就有了对应的处理函数
当有消息来的时候
系统就判断
if Assigned(FOnClick) then begin
// 你的消息处理函数
end;
大概意思是这样

然后是属性,比如有个成员变量是FName : stirng
你要对这个成员读取,但是不想直接读取,或者在读写的时候做写操作。那就放在Private里面,外面放一个属性
property Name : string read FName write FName;
当你在程序程序里面用的时候
比如
class.Name := xxx;
的时候,就表示你要写Name这个属性,系统会去调用write 后面的哪个东西,可以是个函数(一般是Set开头),也可以就是真正的那个变量,
如果你要
xxx := class.Name;
那么就是调用read后面的那个东西,同write。如果是函数一般是Get开头
如果只有Read,那么这个属性就是只读的,如果只有write,就是只写的(就是不能通过class.name的方式取出来)
 
SetDataSet 是个过程
 
property AutoEdit: Boolean read FAutoEdit write FAutoEdit default True;
property DataSet: TDataSet read FDataSet write SetDataSet;
property Enabled: Boolean read FEnabled write SetEnabled default True;
这是Vcl源码Db.pas中的声明,您看看,FAutoEdit可是属性啊!
property Value: IUnknown read GetValue write SetValue;
这里的读用的是读方法,写的是写方法?
 
可能我没有将问题说清楚,我是问:对待读方法有时用Get方法来取属性,有时直接读取属性就行了;对待写方法有时用Set方法,有时却要用Set方法,有没有具体详细点的答案啊!
 
我已经说得很详细了,你再可能看,不明白再说
 
你看是不是这个原因,属性的设置方法中,既可以直接用属性赋值,也可以用Set方法来写,关键是看是不是在属性的更改中要牵涉到更改其他的值或者是调用其他的方法,你看在SetDataSet中就调用了OnDataChange的方法来更新。
对于Read FOnDataChange Write FOnDataChange中,我就没有看到用SetOnDataChange的,是不是不能用,或者是可以用的。
 
是这样的,事件其实可以理解成一个函数指针,属性不同,Delphi的帮助里面说的比较清楚
 
谢谢各位!
 
后退
顶部