「リストのインデックスが範囲を超えています(1)」のエラーを解除するには?


やまだ  2014-06-19 00:47:20  No: 46401

何度も申し訳ございません。
開発環境は、delphiXE3 enterprise(update2適用)、win7(sp1)、sqlite3です。

コントロールの初期化をしているところがあるんですが、その箇所で「プロジェクトaaaは例外クラスEStringListError(メッセージ'リストのインデックスが範囲を超えています(1)')を送出しました。」というエラーメッセージが出ます。

コントロールの初期化とは、以下のようなものです。

edit1.text:='';

このメッセージでwebを探していたんですが、コレというものがなくて。

このメッセージは、先日からお聞きしているapplication.processmessagesを使わなくちゃいけないんでしょうか?

メッセージのキューがいっぱいになっているんでしょうか?

解除法があったら教えていただきたいです。

コントロールの初期化のコードはいろいろな動作をするとき結構呼ばれるコードです。

もちろんエラーは出ないです。

よろしくお願いします。


  2014-06-19 01:01:48  No: 46402

的を射た質問になっていないのが気になりますが…

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/Classes_EStringListError.html

リストボックスなどで、リストの項目数を超えて読み書きなどすると
出るエラーのようです。

Application.ProcessMessagesは、利用法もわからず安易に呼ぶべき
ではありません。プログラムが意図しない順で実行される可能性を
生み出す、初心者には混乱のもととなる関数です。ここでの質問者の
書き込みを見ていると、現状ではバグを生み出す原因にしかならない
と思います。


やまだ  2014-06-19 01:39:40  No: 46403

こんにちは。

確かリストボックスやTListは使っていませんでした。

僕はいろいろな関数を作るとき引き数に「sender:tobject」を入れていたりします。

例えばボタンクリック時

abc(sender);
def(sender);
ghi(sender);
jkl(sender);

のような感じになります(abc、def、ghi、jklは関数)。

abcは大方コントロールの初期化になっています。

abcの中はエラーになりようがないコードになっています。

senderを引き継ぎ引き継ぎするので、エラーが出ているんじゃないかと思って、以下のように変更してみました。

abc(self);
def(sender);
ghi(sender);
jkl(sender);

するとエラーは出なくなりました。

なんか腑に落ちない感じになっているんですが。

senderを引き数に使っていたのが問題だったのでしょうか?


tor  2014-06-19 01:58:20  No: 46404

何だか「パソコンが起動しなくなったけれど、レモン汁を塗らないと駄目でしょうか?」というような
いやどこで何を聞いてきたらそうなるの?という滅茶苦茶な解法にしか聞こえないのですが……
ミヘ云々は一度スッパリ忘れた方がいいかと。

「リストのインデックスが範囲を超えていますィアゥ」ということは、リストのイ番目の要素ロアンにアクセスしようとしたけれど
そのリストにはイ番目なんてない(まだー個かア個しかないよ)ということエラーになっています。

例えば次のようなことをしていたりしませんか?
ヲサヲサアョヤヲサコスヲサァァサ
ヲサヲサモヘィアョフロアンゥサヲサッッヲサイ行目はないのでエラー

あるいはこんなこととか。
ヲサヲサアョノロアンヲサコスヲサァアァサヲサッッヲサコンボボックスにイ行目がなかったらエラー
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアエッーカッアクィ水ゥ アキコーオコーキ  書込者ノト:ロ 」 ァ」ハノ

 ン

と書いている間に新しい情報が。

ヲサヲサ例えばボタンクリック時
ということはボタンクリックイベントですよね?
その場合、モに入ってくるのはイベントを発行したオブジェクト、すなわちヤツです。
一方、モというのはそのイベントを実行しているオブジェクトだからヤニです。

例えば
ヲサヲサヲサヤニアョツアティモコヲサヤマゥサ
というイベントハンドラなら、モヲサスヲサツアャヲサモヲサスヲサニアヲサとなります。

関数が期待しているのは、ヤツとヤニのどちらなのですか?
ヤツを渡されているのに、無理矢理ヤニにキャストしてその上のコンポーネントにアクセスしようとしている、という可能性はないでしょうか。
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアエッーカッアクィ水ゥ アキコアオコイク  書込者ノト:ロ 「。「 「「 ン

仰られていることは何もしていません。

関数の中は以下のような感じです。
コントロール名は変えています。

ヲサヲサヲサヲサホカョヤコスァァサ
ヲサヲサヲサヲサカョヨコスサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ←ここでエラーが出ます
ヲサヲサヲサヲサノトカョヤコスァァサ
ヲサヲサヲサヲサヘカョヤコストィァァャゥサ
ヲサヲサヲサヲサヘカョヤコスアサ
ヲサヲサヲサヲサフカョテコスァァサ
ヲサヲサヲサヲサナカョヤコスァァサ
ヲサヲサヲサヲサトヤカョトコスサ
ヲサヲサヲサヲサトヤカョヤコスイーサ
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアエッーカッアクィ水ゥ アキコイーコイウ  書込者ノト:ロ 「。「 「「 ン

間違っていました。

メッセージのデバッグのボタンをクリックすると

ヲサヲサヲサヲサヲサホカョヤコスァァサ
ヲサヲサヲサヲサヲサカョヨコスサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ←ここで止まります
ヲサヲサヲサヲサヲサノトカョヤコスァァサ
ヲサヲサヲサヲサヲサヘカョヤコストィァァャゥサ
ヲサヲサヲサヲサヲサヘカョヤコスアサ
ヲサヲサヲサヲサヲサフカョテコスァァサ
ヲサヲサヲサヲサヲサナカョヤコスァァサ
ヲサヲサヲサヲサヲサトヤカョトコスサ
ヲサヲサヲサヲサヲサトヤカョヤコスイーサ
スススススススススススススススススススススススススススススススススススススススス
ニコ あ
トコ イーアエッーカッアクィ水ゥ アキコオオコイア  書込者ノト:ロ 「ィ。」「  ン

ナホカョヤの参照元が、モフからデータを引っ張っているという
ことはありませんか。

いずれにせよ、本来あるべきものとは大幅に異なるルールでプログラムを
作成されているようですので、これ以上のことはわかりません。
質問者が関数の作り方を十分に調べ、バグのない関数の作り方を学ばれる
ことが一番の近道かもしれません。
スススススススススススススススススススススススススススススススススススススススス
ニコ けど
トコ イーアエッーカッアクィ水ゥ イイコイクコオキ  書込者ノト:ロ 「「。 ン

ヲサ僕はいろいろな関数を作るとき引き数に「コ」を入れていたりします。

まず、これが間違い(関数の中で引数を使って何かをしていないのでしたら)

ヲサィモコヤマゥサ
ヲサィモコヤマゥサ
ヲサィモコヤマゥサ
ヲサィモコヤマゥサ


ヲササ
ヲササ
ヲササ
ヲササ

にしてください
引数は「何となく付けるもの」ではありません

次に「コントロールの初期化をしているところ」の一行目で「ニオ」(ブレークポイント設定)を押してから「ニケ」(実行)して、
↑で止まったら「ニク」を押して一行ずつ実行してみてください
もし、「コントロールの初期化をしているところ」のなかで他の関数に飛ぶところがあればそこは「ニキ」で

ヲサ確かリストボックスやヤフは使っていませんでした。

初心者の方が好んで使われるヲサニフツヲサとか
スススススススススススススススススススススススススススススススススススススススス
ニコ 通りすがり
トコ イーアエッーカッアケィ木ゥ アウコエエコイケ  書込者ノト:ロ 」。・。。  ン

デバッグビルドにして、ノトナのツール→オプション→デバッガオプション→ナデバッガ→言語固有の例外で
言語の例外を通知をチェックオンにする。
実行してエラーが発生し、ノトナのダイアログで通知されたらブレークを選択するとエディタ上にエラーが起きた箇所が
表示される。ここで呼び出し履歴ウィンドウを見るとこの箇所への呼び出し経路が表示されるィそれぞれの呼び出しを
ダブルクリックするとそのコードも表示できるゥので、これでエラーが起きている原因をよく調べる。
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアエッーカッイキィ金ゥ ーケコエケコーア  書込者ノト:ロ 「。「 「「 ン
モコ 

遅くなりました。
申し訳ございません。

エラーの場所が分かりました。

先日仰られていたような、を使っていました。

を初期化してカラムを追加、を追加して使っていたのですが。

どうやら、のが範囲外を指定していたみたいです。

ホントお騒がせいたしました。

と同時に、本当にありがとうございました。


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

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






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