8

ユーザーがラベルをクリックしたときに ListBox でアイテムが選択されているかどうかを確認したいのですが、
そのように実行すると、このエラーが発生しましたlist index out of bounds

procedure TfrMain.Label15Click(Sender: TObject);
var
 saveDialog : TSaveDialog;
 FileContents: TStringStream;
 saveLine,Selected : String;
begin
 saveDialog := TSaveDialog.Create(self);
 saveDialog.Title := 'Save your text or word file';
 saveDialog.InitialDir := GetCurrentDir;
 saveDialog.Filter := 'text file|*.txt';
 saveDialog.DefaultExt := 'txt';
 saveDialog.FilterIndex := 1;

 Selected := ListBox1.Items.Strings[ListBox1.ItemIndex]; 

 if Selected <> '' then
 begin
  if saveDialog.Execute then
  begin
   FileContents := TStringStream.Create('', TEncoding.UTF8);
   FileContents.LoadFromFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);
   FileContents.SaveToFile(saveDialog.Filename);
   ShowMessage('File : '+saveDialog.FileName)
  end
 else ShowMessage('Save file was not succesful');
  saveDialog.Free;
 end;
end;
4

2 に答える 2

7

このコード

if Selected then

は文字列であるため、コンパイルされませんSelected。これを投稿する直前に実験していたと思います。

ListBox1.ItemIndex すべて同じあなたのエラーメッセージと質問のタイトルはそれが-1に等しいことを示唆してい ます。したがって、リストインデックスの範囲外エラー。

ListBox1.ItemIndexリストボックスから読み取る前に、-1ではないチェックを追加する必要があります。ItemIndex=-1アイテムが選択されていないことを検出する方法です。したがって、コードは次のようになります。

.....
saveDialog.DefaultExt := 'txt';  
saveDialog.FilterIndex := 1; 
if ListBox1.ItemIndex <> -1 then
begin
.....
于 2012-04-20T19:22:45.217 に答える
2

これは、リスト ボックスで何も選択されていない場合に発生します。

使用してみてください:

procedure TfrMain.Label15Click(Sender: TObject);
var
 saveDialog : TSaveDialog;
 FileContents: TStringStream;
 saveLine,Selected : String;
begin
 saveDialog := TSaveDialog.Create(self);
 saveDialog.Title := 'Save your text or word file';
 saveDialog.InitialDir := GetCurrentDir;
 saveDialog.Filter := 'text file|*.txt';
 saveDialog.DefaultExt := 'txt';
 saveDialog.FilterIndex := 1;

 if ListBox1.ItemIndex >= 0 then
 begin
  Selected := ListBox1.Items.Strings[ListBox1.ItemIndex]
  if saveDialog.Execute then
  begin
   FileContents := TStringStream.Create('', TEncoding.UTF8);
   FileContents.LoadFromFile(Selected);
   FileContents.SaveToFile(saveDialog.Filename);
   ShowMessage('File : '+saveDialog.FileName)
  end
 else ShowMessage('Save file was not succesful');
  saveDialog.Free;
 end;
end;
于 2012-04-20T19:20:21.070 に答える