读书人

为何这三行代码不起作用

发布时间: 2012-09-04 14:19:30 作者: rapoo

为什么这三行代码不起作用?
我在Frame中建立3个GroupBox,每一个都包含一个StringGrid(所有的StringGrid都只有两列,但行数不限。而且StringGrid无侧边栏,即:StringGrid.FixedRows = 1 , StringGrid.FixedCols = 0。另外,StringGrid的Option中的goEditing和goRowSelect两个属性全部设为True)。我现在想实现如下目的:

1、在StringGrid中,单击一次,StringGrid自动添加一行。

2、将StringGrid中的单元格改变边框颜色等操作。

由于共有3个StringGrid,而所有StringGrid都想实现以上两个功能。所以自定义了两个事件用来实现这两个功能。但在From中引用Frame后,按F9运行,未提示错误,但不起任何作用。

代码如下:

public
{ Public declarations }
procedure ClickStringGrid;
procedure StringGridDrawCell(ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);

implementation

{$R *.dfm}

procedure TF_FrameStringGrid.ClickStringGrid;
Var
sgdCount: Integer;
begin
For sgdCount := 0 To F_FrameStringGrid.ControlCount -1 Do
begin
IF F_FrameStringGrid.Controls[sgdCount] IS TStringGrid Then
(F_FrameStringGrid.Controls[sgdCount] as TStringGrid).RowCount :=
(F_FrameStringGrid.Controls[sgdCount] as TStringGrid).RowCount + 1;
end;
end;

procedure TF_FrameStringGrid.StringGridDrawCell(ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
Var
sgdSum: Integer;
begin
For sgdSum := 0 To F_FrameStringGrid.ControlCount -1 Do
begin
IF F_FrameStringGrid.Controls[sgdSum] IS TStringGrid Then
begin
(F_FrameStringGrid.Controls[sgdSum] as TStringGrid).Canvas.Pen.Color := clRed;
(F_FrameStringGrid.Controls[sgdSum] as TStringGrid).Canvas.Brush.Style := bsClear;
(F_FrameStringGrid.Controls[sgdSum] as TStringGrid).Canvas.Rectangle(Rect);
end;
end;
end;


那些添加行、修改边框的代码,在先开始,我是一个StringGrid,一个StringGrid的做,可以实现。但改成所有的StringGrid一起修改后,就不起作用了。比如:
StringGrid1.RowCount := (F_FrameStringGrid.Controls[sgdCount] as TStringGrid).RowCount + 1;
StringGrid1.Canvas.Pen.Color := clRed;
这样一个StringGrid一个StringGrid1的做,就可以实现,改了以后,就不能实现了。错在哪儿?

3、在Form中调用Frame后,在Form显示时,希望将每一个StringGrid的第1行的第1、2列(即表头)设为想要的汉字标题。但输入代码后,也是没有反应。

由于3个StringGrid中的标题不同,所以将这个功能的代码放在Form.Active中。

procedure TF_BaseHiddenSet.FormActivate(Sender: TObject);
begin
inherited;
F_BaseHiddenSet.Height := 656;
F_BaseHiddenSet.Width := 763;

F_DataModule.ADOTable1.TableName := 'HiddenSet';
F_DataModule.ADOTable1.Open;

F_FrameStringGrid.sgdForUnits.Cells[0,0] := '被检单位';
F_FrameStringGrid.sgdForUnits.Cells[1,0] := '负 责 人';

F_FrameStringGrid.sgdUnits.Cells[0,0] := '检查单位';
F_FrameStringGrid.sgdUnits.Cells[1,0] := '负 责 人';

F_FrameStringGrid.sgdRectify.Cells[0,0] := '整改期限';
F_FrameStringGrid.sgdRectify.Cells[1,0] := '整改结果';
end;

[解决办法]
不需要

读书人网 >.NET

热点推荐