大家看看,我继承的构造函数咋不行呢?(200分)

  • 主题发起人 主题发起人 nullbert22
  • 开始时间 开始时间
N

nullbert22

Unregistered / Unconfirmed
GUEST, unregistred user!
代码是这样的:
tmydbgrid=class(dbgrid)
...
public
constructor create(aower:tcomponent);override;

constructor tmydbgrid.create(aower:tcomponent);
begin
inherited;
sold.cbSize:=sizeof(sold);
sold.fmask:=sif_all;
sold.nMin:=1;
sold.nMax:=self.DataSource.DataSet.RecordCount;
setscrollinfo(self.Handle,sb_vert,sold,true);
end;
编译可以通过,运行咋不行呢
 
继承的地方应该这样写 inherited create(Aowner);
没有参数的可以直接写 inherited[:D]
 
从你的代码看:
sb_vert和sold是什么?创建了实例吗?

关于Handle属性:
Provides access to the window handle of the control.

Description

Use the Handle when making Windows API function calls that requires a window handle.

If a window handle for the control doesn't exist, the Handle property creates

one by calling the HandleNeeded method when your application reads the Handle

property value. Therefore, do not use the Handle property during component creation or streaming.

Handle is a read-only property.

注意这一句:
do not use the Handle property during component creation or streaming.
 
恐怕问题在于
sold.nMax:=self.DataSource.DataSet.RecordCount;
因为
DataSource=nil吧
 
同意三楼
 
加上一些判断
if datasource <> nil then
if datasource.dataset <>nil then
if DataSource.DataSet.Active then

 
多人接受答案了。
 
出错的原因楼上各位都说过了。

setscrollinfo(self.Handle,sb_vert,sold,true);
不应该是在Create的时候执行,因为此时你是无法得到Grid关联的DataSet有几条记录的
此时其DataSource可能是nil。
 
后退
顶部