首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

为何这三行代码不起作用

2012-09-04 
为什么这三行代码不起作用?我在Frame中建立3个GroupBox,每一个都包含一个StringGrid(所有的StringGrid都只

为什么这三行代码不起作用?
我在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;

[解决办法]
不需要

热点排行