程序中AV的未知原因

时间:2014-05-14 16:43:58

标签: delphi

我创建了一个空单元来存储我的公共过程和函数,但是我在程序的第一行遇到了访问冲突,但这是第一次只调用这个过程,以后调用正常工作!!

单位代码:

unit myFunc;

interface

uses
  Windows, Messages, SysUtils, System.UITypes, Variants, Classes, Graphics, Controls, Forms;

  Procedure GSet(grid_form: TForm; app, operation: string);

implementation

Procedure GSet(grid_form: TForm; app, operation: string);
var
grd_idx: integer;
begin
  if operation = 'save' then begin  // Access violation in this line 

    if (grid_form.components[grd_idx] is TMyComponent) then
    (grid_form.components[grd_idx] as TMyComponent).Storedata('c:\'+app);
  end;
end;

更新 我从像这样的表单创建事件中调用此过程

GridSettings(myform, 'cost', 'save');

1 个答案:

答案 0 :(得分:1)

从问题中的代码来看,最明显的错误是变量grd_idx未初始化。您必须在使用变量之前初始化变量。

最重要的是,您可能在第一个参数中传递了无效的对象引用。我们不能从这里说出来。但是,您可能正在传递尚未初始化的全局变量。它看起来非常像你应该传递Self而不是那个全局变量。

GridSettings(Self, 'cost', 'save');

当然,我在这里假设Self是你打算在这里传递的。由于您没有提供太多代码,我们只能猜测代码的详细信息。

您询问如何在创建所有控件后触发OnCreate事件。那已经是这样了。创建控件并在其中传输属性后,将触发OnCreate方法。

我还要评论使用字符串来选择离散选项并不是一个好主意。使用枚举类型。