Att*_*lah 3 delphi openfiledialog
我有一个包含TOpenDialog组件(OpenDialog1)和按钮的表单.
OpenDialog1将ofAllowMultiSelect(of Options)属性设置为true.
单击按钮后,AddFilesToListView执行该方法:
procedure TForm4.AddFilesToListView();
var
ListItem : TListItem;
I: Integer;
F : File;
LengthOfAudio : TDateTime;
previousCursor : TCursor;
begin
previousCursor := Self.Cursor;
Self.Cursor := crHourGlass;
if OpenDialog1.Execute then
begin
for I := 0 to OpenDialog1.Files.Count - 1 do begin
if FileExists(OpenDialog1.FileName) then begin
ListItem:=ListView1.Items.Add;
ListItem.Caption := 'Test';
ListItem.SubItems.Add(ExtractFileName(OpenDialog1.Files[I]));
ListItem.SubItems.Add(ExtractFilePath(OpenDialog1.Files[I]));
end else
raise Exception.Create('File does not exist.');
end;
end;
Self.Cursor := previousCursor;
OpenDialog1.Files.Free;
end;
Run Code Online (Sandbox Code Playgroud)
运行应用程序时,选择的第一个文件,我没有任何问题,但想选择第二个的时候,我得到一个错误说"工程项目3引起的异常类EInvalidPointer与消息'无效的指针操作’."
造成这种情况的原因是什么,我该怎么做?
Rob*_*edy 22
"无效的指针操作"意味着您释放了不属于您的内存.其中一个原因是:
在你的代码,你解放了TOpenDialog的Files财产.您没有分配该字符串列表,并且文档没有告诉您释放它,因此期望列表实际属于对话框组件是合理的,并且组件将在需要时释放它.检查Dialogs.pas中的源代码确认了这一点.由于您还释放了该对象,因此您有一个双重自由错误,它符合我上面列出的第一个标准.删除该行.
正如Uwe指出的那样,你也在处理一个文件名列表,但只检查一个文件名是否存在.这是程序中的逻辑错误,但它不会导致您看到的异常.
| 归档时间: |
|
| 查看次数: |
33483 次 |
| 最近记录: |