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);