Delphi 填充数组并以不同形式将其内容显示到丰富的编辑中

Delphi 填充数组并以不同形式将其内容显示到丰富的编辑中,delphi,delphi-7,Delphi,Delphi 7,这是我单击btnInfoClick 调试器异常通知 Project_PAT_Phase_3.exe引发异常类EAccessViolation,消息为“模块'Project_PAT_Phase_3.exe'读取地址00000022'中地址004047E0处的访问冲突” 程序运行平稳,没有任何错误,直到我点击按钮,如我的代码所示。谢谢你的帮助 unit Navigation; interface uses Windows, Messages, SysUtils, Variants, Clas

这是我单击
btnInfoClick

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

程序运行平稳,没有任何错误,直到我点击按钮,如我的代码所示。谢谢你的帮助

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;

该错误消息的地址非常接近于零,表明您正在访问一个nil对象引用。FrmInfo很可能为零。或者sArrayParty是零。使用调试器确认错误所在的位置。显然,引用nil引用是错误的

当您遇到这样的错误时,使用配置为在异常时中断的调试器,将您指向发生故障的代码行。然后试着找出那行代码失败的原因


如果向您展示了数百行代码,则很难找出故障所在。如果你能专注于一行代码,那就容易多了。是学习调试的时候了。

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

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

这个错误到底发生在哪里(代码的哪一行)?我肯定你已经调试好了,对吧?所以当你在第一行设置一个调试器断点,运行你的应用程序,并逐步检查代码时,哪一行导致了异常?当我看到这样的代码时,有点让我伤心。是的,我在任何特定的行上都没有错误,我得到了弹出错误,仅此而已,程序只是停止从运行there@user什么意思?你知道调试器吗?我相信他实际上正在访问未初始化的数组<代码>ReadLn(MyFile,sLine);斯林:=sArrayParty[K]
毫无意义。请再读一遍我的答案,并听从建议。使用调试器。哪一行抛出了错误。哎呀,我以为我们不应该回答“坏问题”-(至少你刚才是这么告诉我的-是哪一行?:-)我如何将其设置为异常?@user在调试选项中,该设置名为“异常时中断”或类似设置。
if FrmInfo = nil then
  FrmInfo := TFrmInfo.Create(nil);