填充数组并将其内容显示在不同表单上的丰富编辑中

时间:2013-10-23 18:31:34

标签: delphi delphi-7

这是我点击btnInfoClick

时收到的错误
  

调试器异常通知
  Project_PAT_Phase_3.exe引发异常类EAccessViolation,并在模块'Project_PAT_Phase_3.exe中读取地址004047E0处的访问冲突''读取地址00000022'。

程序运行顺利,没有任何错误,直到我点击代码中显示的按钮。我很感激你的帮助。

unit Navigation;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, InfoPopUp;

type
  Tvector = Array[1..14] of string;
  TFrmNavigation = class(TForm)
  btnVote: TButton;
  RdgInfo: TRadioGroup;
  Label2: TLabel;
  btnInfo: TButton;
 procedure btnInfoClick(Sender: TObject);
 private

public
 MyFile : TextFile;
 sLine : string;
 sArrayParty : Tvector;
end;

var
  FrmNavigation: TFrmNavigation;

implementation


procedure TFrmNavigation.btnInfoClick(Sender: TObject);
var
 K : integer;
 iCheck : integer;
begin
FrmInfo.Visible := true;
K := 1;
iCheck := 0;

if FileExists('PartyInfo.txt') <> True
then
  begin
    MessageDlg('File does not exist',mtError,[mbOK],0);
    Exit;
    end;// end of If statement

AssignFile(MyFile,'PartyInfo.txt');
Reset(MyFile);

while NOT eof(MyFile) do
 begin
  Inc(K);
  Readln(MyFile,sLine);
  sLine := sArrayParty[K];
end;//end of While
  closefile(MyFile);


 case RdgInfo.ItemIndex  of
 0 : begin
     FrmInfo.Caption := 'African Christian Democratic Party (ACDP)';
     FrmInfo.redOutput.Text := sArrayParty[1];
     end;
 1 : begin
     FrmInfo.Caption := 'African National Congress (ANC)';
     FrmInfo.redOutput.Text := sArrayParty[2];
     end;
 end;

下面的最后一个end.是错误在代码中弹出的地方,但它在项目单元中是奇怪的,因为当我有一个断点时,异常将在while循环中停止程序。

program PAT_Phase_3;

uses
  Forms,
  WelcomePage in 'WelcomePage.pas' {frmWP},
  Navigation in 'Navigation.pas' {FrmNavigation},
  InfoPopUp in 'InfoPopUp.pas' {FrmInfo};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmWP, frmWP);
  Application.CreateForm(TFrmNavigation, FrmNavigation);
  Application.CreateForm(TFrmInfo, FrmInfo);
  Application.Run;
end.

2 个答案:

答案 0 :(得分:0)

错误消息的地址接近于零,表示您正在访问nil对象引用。很可能FrmInfo是零。或者也许sArrayParty是零。使用调试器确认错误的位置。显然,引用nil引用是错误的。

当您收到类似这样的错误时,请使用配置为中断异常的调试器,以指向出现故障的代码行。然后尝试找出代码行失败的原因。

如果您遇到数百行代码,很难找出故障的位置。如果你可以专注于一行代码,那就容易多了。是时候学习调试了。

答案 1 :(得分:0)

在Delphi中,您可以通过项目设置将表单设置为AutoCreate。如果您的项目不是自动创建所有表单,那么您的FrmInfo将为零。在您之前添加此代码 FrmInfo.Visible := true;行,看看它是否会让你更进一步。

if FrmInfo = nil then
  FrmInfo := TFrmInfo.Create(nil);