文字列リストに文字を格納する時に・・・

解決


はまっこ  2005-08-24 02:19:39  No: 17238

Delphi初心者です。宜しくお願いします。
Delphi5Proを使用していて、ふと疑問があがったので、ご教授いただけますでしょうか。

procedure TForm1.Button1Click(Sender: TObject);
var
  St:Tstringlist;
begin
  st:= st.Create;
  st.Strings[0]:='はろぅ';
  ShowMessage(st.Strings[0]);
end;

上記のように書いて実行すると、エラーになってしまいますが、原因がわかりません。ヘルプには
MyStringList.Strings[0] := 'This is the first string';
とか書いてあるので、大丈夫と思ったのですが…

すみませんが、宜しくお願い致します。


おおさわ  2005-08-24 02:44:48  No: 17239

とりあえず、

st:= st.Create;
⇒ st:= TStringList.Create;

としてみてはいかがでしょうか。


はまっこ  2005-08-24 02:54:55  No: 17240

おおさわ様、レス有難う御座います。
おっしゃるようにやってみたのですが、
st.Strings[0]:='はろぅ';
の部分でEStringListErrorクラスの例外を生成したという事で、'リストのインデックスが範囲を超えています(0)'というメッセージが表示されてしまいます。

なんででしょう…T_T


おおさわ  2005-08-24 02:57:31  No: 17241

では、

st.Strings[0]:='はろぅ';
⇒ st.Add('はろぅ');

ならどうですか?


はまっこ  2005-08-24 03:09:32  No: 17242

それだとできますね…
最初に書いたように、
  st:= st.Create;
と書くと、Addでも失敗するみたいですが、教えて頂いたようにすると
AddでOKみたいです。今後はTStringList.Createと書く事にしますm(_ _)m

気になるのは、ヘルプにあるようなやり方ではできないんでしょうか?
ヘルプの「TStringList.Strings」にある文章をよーく読んでいたら、
「Strings を使うと,特定位置の文字列を読み出したり変更したりでき
ます。」とありました。これって既にあるものの位置は指定できるけど
追加はAddとかを使ってね。という事になるんでしょうかねぇ?


anone  2005-08-24 03:16:13  No: 17243

> これって既にあるものの位置は指定できるけど
> 追加はAddとかを使ってね。という事になるんでしょうかねぇ?

そうです。ないものの中身を変更しようとするとエラーになります。

> 今後はTStringList.Createと書く事にしますm(_ _)m

これに限らず、必ず、コンストラクタはクラス参照で実行してください。


はまっこ  2005-08-24 03:25:17  No: 17244

おおさわ様、anone様、本当に感謝です。
まだまだ勉強不足すぎる所がありますが、今後も精進したいと思います。
今後とも宜しくお願い致します


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加