

VB.NET2003でDLLの開発をしています。
どうしても原因が分からないエラーが発生し、次に進めないので、どなたか助けてください。
Windowフォーム上にリストボックスを作成し、そこに複数のアイテムがある状態です。
この時、不要になったアイテムを削除するため、以下の一文を記述しています。
Me.lst_DoubleEntryFeature.Items.RemoveAt(lListIndex)
DoubleEntryFeatureはリストボックスの名称、lListIndexはLong型で、リストボックスのインデックス値が入ります。
この時は
lListIndex = Me.lst_DoubleEntryFeature.SelectedIndex
です。
lListIndexの値が存在するインデックスを示していることは確認しました。
この一文を実行した場所で、「インデックスが配列の境界外です」というエラーが発生します。
次の行が実行されないので、この一文でエラーが発生しているのですが、指示したアイテムは正常にリムーブされています。
こんな状態なのですが、なにか思い当たるところはありませんか?
とても困っています。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
>結果、メッセージボックス「check1」が出て、OKを押すと、落ちます。
むむっ
>エラーログに、件名に書いたメッセージが出ます。
>つまり、この処理自体は、1回しか動いていません。
なるほど
でもデバッグしないとわかりませんね。
ところで
>(DLLのプログラムなので、デバッグモードが使えないんです)
とありましたが、DLLをデバッグすることは出来ますよ。
ヤブヘビかもしれませんが、一応簡単な説明を書いておきます
まずDLLのソリューションを開きます。
※実行から行う方法
ソリューションエクスプローラでプロジェクトファイルを選択した状態にして、メニューバーより
・「プロジェクト」→「プロパティ」でプロパティページを表示
・「構成プロパティ」の「デバッグ」を選択
・アプリ系なら
「外部プログラムの開始」を選択し、DLLを呼び出すための、最初のEXEを記述
・WEB系なら
「URLの開始」を選択し、DLLを呼び出すための、URLを記述
さらにASP.NET絡みなら「有効にするデバッグ」で「ASP.NET デバッグ」を有効にする
※既に実行しているアプリケーションをアタッチする方法
あらかじめ、DLLを呼ぶEXEもしくはURLを起動しておきます。
メニューバーより
・「デバッグ」→「プロセス」を選択
・アタッチしたいプロセスを選択してアタッチ
この回答への補足
結果としては、解決を諦め、別の方法(リストボックスを空にして不要なものを除いて再設定する)をとることにしました。
といいますのは、教えていただいた方法でデバッグしてみたところ、やっぱり予想したところで予想したとおりにエラーが発生したのですが、このステップを無理やり戻して再度実行したところ、正常に通ってしまったのです。
もちろん、リストボックスに元々2件以上のアイテムがあったからで、2件とも消えてしまいましたが。
なので、ロジック上に問題があるわけではなく、前後関係でどこかがおかしいらしい、という結論に落ち着きました。
これを回避するより、再設定したほうが時間が早く済みそうなので、そちらの方法を取ります。
アドバイスをありがとうございました。
No.2
- 回答日時:
完全推測です。
>この一文でエラーが発生しているのですが、指示したアイテムは正常にリムーブされています。
エラーが発生しているのに「正常にリムーブ」されているのですね?
(1)Dim lListIndex As Long
(2)lListIndex = Me.lst_DoubleEntryFeature.SelectedIndex
(3)Me.lst_DoubleEntryFeature.Items.RemoveAt(lListIndex)
(2)と(3)は、同じ処理の一連に無いのではないですか?
リスト選択時に(2)
削除ボタンが押されたときに(3)
とか、処理を分けていませんか?
一見、
[エラーが発生]→でも[正常にリムーブ]
のように見えて、
リムーブ処理が2回働いているように思えますが、いかがでしょう?
(3)の処理の前に
Debug.WriteLine(lListIndex & "削除")
とかして、何回処理が通るかを教えてもらえませんか?
回答ありがとうございます。
そうなんですよね。同じ処理を何度も通っているのではないか、とは、私も疑いましたので、
msgbox("check1")
Me.lst_DoubleEntryFeature.Items.RemoveAt(lListIndex)
msgbox("check2")
この状態にして実行してみました。
(DLLのプログラムなので、デバッグモードが使えないんです)
結果、メッセージボックス「check1」が出て、OKを押すと、落ちます。
エラーログに、件名に書いたメッセージが出ます。
つまり、この処理自体は、1回しか動いていません。
こんな状態です。
いかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBAで、On Error が効かない】 3 2022/06/09 10:08
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- 外国株 インデックス投資は、実は罠がある、バンガード社が、ウオール街の ランダムウオーカーとか、宣伝活動した 2 2023/01/06 22:08
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Excel(エクセル) エクセル シート内のボックスを縦並びから横並びに 7 2023/04/05 04:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAのコードがエラーになっ...
-
『実行時エラー 5 プロシージャ...
-
VBAのエラー発生場所をメッセー...
-
SQL文をVBAで流すと「型...
-
VBAでのエラー
-
Outlook.ApplicationをCreateOb...
-
INSERT INTOステートメント構文...
-
OLEDB.NETで接続できない
-
エラーでつまってます・・・お...
-
インプットボックスのキャンセ...
-
C#のSystem.Windows.Media.Colo...
-
【Excel VBA】マクロをボタンに...
-
トランスポートレベルのエラー
-
ExcelVBA Range クラスの Page...
-
マクロについて教えてください...
-
Accessで定型フォーマットのExc...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー -'-2147417848
-
ExcelVBA Range クラスの Page...
-
マクロについて教えてください...
-
VBAでのエラー
-
【Excel VBA】マクロをボタンに...
-
実行時エラー48発生時のDLL特定...
-
EXCEL VBAマクロ中断でデバッグ...
-
なぜエラーになるのでしょうか...
-
実行時エラー3001「引数が間違...
-
OLEDB.NETで接続できない
-
INSERT INTOステートメント構文...
-
VBAのエラー発生場所をメッセー...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
ADODB.Streamを使用してUTF-8を...
-
カーソルオープンでエラー(ORA...
-
Invalid procedure call or arg...
おすすめ情報