我在PageControl1上加了多个TabSheet,每个TabSheet上都有一个StringGrid, 我用的是第三方控件AdvStringGrid,我在点击增加一行的菜单时在当前StringGrid上增加一行。执行如下的代码:
procedure TfmHistoryForecastRecord.Add1Click(Sender: TObject);
var
iNo : string;
i, iCol : integer;
begin
(sender as TAdvStringGrid).RowCount := (sender as TAdvStringGrid).RowCount + 1; iNo := sNo;
Delete(iNo,Length(Trim(iNo)) - 1, 2);
iNo := IntToStr(StrToInt(iNo) + 1);
(sender as TAdvStringGrid).Cells[0, (sender as TAdvStringGrid).RowCount - 1] := iNo + '期';
sNo := iNo + '期'; blCanEdit := True;
Save1.Enabled := blCanEdit; (sender as TAdvStringGrid).Cells[2, (sender as TAdvStringGrid).RowCount - 1] := ''; iCol := 4;
for i := 0 to sSection.Count - 1 do
if iCol < (sender as TAdvStringGrid).ColCount then
begin
(sender as TAdvStringGrid).Cells[iCol, (sender as TAdvStringGrid).RowCount - 1] := '';
iCol := iCol + 3;
end;
end;
编译可以通过,但在执行的时候报错:Invalid class typecast,请问我如何实现这一功能呢。
procedure TfmHistoryForecastRecord.Add1Click(Sender: TObject);
var
iNo : string;
i, iCol : integer;
begin
(sender as TAdvStringGrid).RowCount := (sender as TAdvStringGrid).RowCount + 1; iNo := sNo;
Delete(iNo,Length(Trim(iNo)) - 1, 2);
iNo := IntToStr(StrToInt(iNo) + 1);
(sender as TAdvStringGrid).Cells[0, (sender as TAdvStringGrid).RowCount - 1] := iNo + '期';
sNo := iNo + '期'; blCanEdit := True;
Save1.Enabled := blCanEdit; (sender as TAdvStringGrid).Cells[2, (sender as TAdvStringGrid).RowCount - 1] := ''; iCol := 4;
for i := 0 to sSection.Count - 1 do
if iCol < (sender as TAdvStringGrid).ColCount then
begin
(sender as TAdvStringGrid).Cells[iCol, (sender as TAdvStringGrid).RowCount - 1] := '';
iCol := iCol + 3;
end;
end;
编译可以通过,但在执行的时候报错:Invalid class typecast,请问我如何实现这一功能呢。
sender 不是能随意的转换为你想要的类的.在你的说明中,你的代码是写在的菜单项的click事件中,那你的sender 就只能
sender as TMenuItem,而不能(sender as TAdvStringGrid)就是这个点击事件,不是TAdvStringGrid触发的,而是菜单触发的.