我创建了一个空单元来存储我的公共过程和函数,但是我在程序的第一行遇到了访问冲突,但这是第一次只调用这个过程,以后调用正常工作!!
单位代码:
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');
答案 0 :(得分:1)
从问题中的代码来看,最明显的错误是变量grd_idx
未初始化。您必须在使用变量之前初始化变量。
最重要的是,您可能在第一个参数中传递了无效的对象引用。我们不能从这里说出来。但是,您可能正在传递尚未初始化的全局变量。它看起来非常像你应该传递Self
而不是那个全局变量。
GridSettings(Self, 'cost', 'save');
当然,我在这里假设Self
是你打算在这里传递的。由于您没有提供太多代码,我们只能猜测代码的详细信息。
您询问如何在创建所有控件后触发OnCreate
事件。那已经是这样了。创建控件并在其中传输属性后,将触发OnCreate
方法。
我还要评论使用字符串来选择离散选项并不是一个好主意。使用枚举类型。