- PR -

Withでフォームを指定すると「ArgumentOutOfRangeException」が発生する

1
投稿者投稿内容
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2009-01-22 11:50
こんにちは、ボビンと申します。

下記のコードの1行目「With Frm_Search_Tatemono」で
「System.ArgumentOutOfRangeException」が発生するのですが
原因がわからず悩んでいます。
Frm_Search_Tatemonoに引数が必要とのエラーなのでしょうか?
他にも同じような処理で別のフォームをwithで指定している
コードもあるのですが、そちらはエラーが出ていません。
Frm_Search_Tatemonoが怪しいとは思うのですが、特別変わったことはしていません。
Frm_Search_Tatemonoのこのあたりをチェックしたらいいよ、等
お手数ですがわかる方がいましたら、教えていただけると助かります。

コード:
                    With Frm_Search_Tatemono ' ←ここでエラー
                        .StartPosition = FormStartPosition.Manual
                        .Location = New Point(0, Me.Height - Frm_Search_Tatemono.Height)
                        .Init_Forms(Me.Movetown_Panel1.GYOSEIKU_CD, serr)
                        .Visible = False
                        .Show(Me)
                        .Visible = True
                    End With



WinXP、VB2005にて開発しております。
よろしくお願いします。
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2009-01-22 11:55
自己レスです。

エラーはイミディエイトウィンドウに表示される状態で、
try〜CatchではCatchされていません。

アプリ自体は続行できております。
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2009-01-22 16:00
自己レスです。

解決しました!

原因は、
Frm_Search_Tatemono内で、コンボボックスを使用しています。
そのコンボボックスの初期値をセットしているロジックを↓
コード:
                cbo_ippan_kozo.SelectedIndex = 0



次のように変更しました↓
コード:
                If cbo_ippan_kozo.Items.Count <> 0 then
                    cbo_ippan_kozo.SelectedIndex = 0
                End If


エラーは、コンボボックスにはまだitemをセットしていないのに
「.SelectedIndex = 0」を指定しているがために起きていました。

ただ不可解なのはブレークポイントをおいても、このロジックは通りません。
ステップ実行では通らないけど、「With Frm_Search_Tatemono」の時点で
一度ソースを読み込むような動きをしているようです。

解決はしましたが、100%理解していないので、
このような動きに詳しい方がいらっしゃいましたら
後学のために教えて下さい。
推測等でもかまわないです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-01-22 18:50
引用:

ボビンさんの書き込み (2009-01-22 16:00) より:

ただ不可解なのはブレークポイントをおいても、このロジックは通りません。
ステップ実行では通らないけど、「With Frm_Search_Tatemono」の時点で
一度ソースを読み込むような動きをしているようです。

解決はしましたが、100%理解していないので、このような動きに詳しい方がいらっしゃいましたら後学のために教えて下さい。推測等でもかまわないです。


「Form の既定のインスタンス」 を使っているがためにそう見えるだけでしょう。 "ソースを読み込む" ではなく初回参照時の Load が走っているという理解が正しいです。

Form の既定のインスタンスはこういった動きの理解の妨げになる (事実、こういった不具合の温床になっている) ので私は昔から反対しています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ボビン
常連さん
会議室デビュー日: 2007/02/05
投稿数: 45
投稿日時: 2009-01-23 09:41
なるほど、なぜnewしていないのに使えるのかと不思議でしたが
「Formの既定のインスタンス」ですか。
便利そうな一面もありますが、混乱の元ですね。
確かにオプションで制限できた方がいいと思います。
というかこんな機能ない方がいいのでは・・・

じゃんぬねっとさん、どうもありがとうございます。
勉強になりました。
1

スキルアップ/キャリアアップ(JOB@IT)