TStringGrid单元格的范围检查工作吗?

下面是一个简单的Delphi窗体应用程序的代码,它为包含单元格的指定TStringGrid设置超出范围的单元格值。

运行该程序并单击显示窗体上的结果网格时,如果计数器i高于1,则会生成运行时间范围检查错误。

在项目选项中启用了范围检查,并且我尝试了使用和不使用{R +}编译器指令来运行程序。

为什么没有范围检查错误?

我使用在Windows 7(64位)上运行的Delphi7。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R+} 
procedure TForm1.StringGrid1Click(Sender: TObject);
var
    i : Integer;
begin
    Form1.StringGrid1.ColCount := 2;
    Form1.StringGrid1.RowCount := 3;
    for i := 0 to Form1.StringGrid1.RowCount do begin
        Form1.StringGrid1.Cells[0,i+1] := IntToStr(i);
    end;
end;

end.

从文档( 重点添加 ):

$ R指令启用或禁用范围检查代码的生成。 在{$ R +}状态下,所有数组和字符串索引表达式都被验证为在定义的范围内,并且标量和子范围变量的所有赋值都被检查在范围内 。 如果范围检查失败,则会引发ERangeError异常(或者如果未启用异常处理,程序将终止)。

TStringGrid单元格引用不属于受范围检查限制的变量和赋值类型。

链接地址: http://www.djcxy.com/p/50641.html

上一篇: Does range checking on TStringGrid cells work?

下一篇: How to prohibit an unintended tStringGrid onSelectCell event firing