VB中学校について への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 るしぇ  (社会人) 投稿日時 2009/11/13 00:16:14
この手の問題は良く起こります。
SelectedIndexChanged イベントは、
>SelectedIndex プロパティが変更された場合に発生します。(ヘルプ(MSDN)から抜粋)

ListView でも ComboBox でも同じ名前のイベントは同じような動きをします。
選択項目が変更されたときにイベントが起こると考えればいいのですが、
この変更された状態に、「選択項目が1つも無い」状態も含まれることを
知っておくと良いでしょう。

ListView で、人間は1行目を選んだ状態から2行目を選んだ場合、
1) 1行目選択
2) 2行目選択
という2段階の処理だと思います。
しかし実際のプログラムでは、
1) 1行目選択
2) 1行目選択状態の解除(選択行は無い)
3) 2行目選択
という3段階を踏みます。
選択解除の処理が無いと、選択行が2行になってしまいます。

「選択項目が1つも無い」状態でプログラムがどういった動きをするか、
よく確認しましょう。(確認する手段はヘルプで説明されています)
投稿者 るきお(管理者)  (社会人) 投稿日時 2009/11/10 21:29:18
こんにちは。その記事を書いた者です。

わかりにくい記述で失礼しました。
みなさんフォローありがとうございます。

記事のほうにも補足の追加を検討します。

今後もよろしくお願いします。
投稿者 NEON  (社会人) 投稿日時 2009/11/8 03:26:29
neptuneさん、的確なご返答ありがとうございました。

>>ファイル一覧(=lstFileName)に画像やhtmlファイルなどをドロップして、
>>ファイル名をクリックするとちゃんとそれが表示されるのが確認できます。
>↑を守ればエラーにはならないと思いますよ。

ご指示の通り、ファイルを置いてからリストに表示されたファイル名を正確に
クリックしたところファイルが表示されて、私の書いた物自体が卒業制作の
コピーとして正確な物だった事がわかりました。

ついでに、
>ListBoxにD&D後ListBox内のファイル名でない所をクリックすると再現しますね。
というのも同じ状況で確認できたので、おっしゃる意味の正確な所はまだ理解できませんが
エラーとして起きてしまう現象なのでしょうね。

対策用のコードの方をコピーさせていただきまして、実行してみたところ
先ほどと同じようにファイル名ではないところを最初にクリックしてもフリーズせず
その後にファイル名をクリックすると画像がちゃんと表示できたので
対策コードも正確なようです、大変勉強になりました。
今後、これらの現象や対策が理解できるように精進していきたいと思います。
ありがとうございました。
投稿者 neptune  (社会人) 投稿日時 2009/11/8 00:39:39
ListBoxにD&D後ListBox内のファイル名でない所をクリックすると再現しますね。

原因としては未選択状態のチェックをしてないから、
未選択状態のときイベントが走ると配列の要素として-1が存在しないエラーが出るのでしょう。

ただ、卒業制作は必要最小限のサンプルソースなので、
>ファイル一覧(=lstFileName)に画像やhtmlファイルなどをドロップして、
>ファイル名をクリックするとちゃんとそれが表示されるのが確認できます。
↑を守ればエラーにはならないと思いますよ。

でも全くの初心者の方にはわかりにくいかも知れませんね。
管理者さんにソースの追加をお願いしてみては如何ですか?


対応としては以下で問題ないと思います。

    Private Sub lstFileName_SelectedIndexChanged(ByVal sender As ObjectByVal e As System.EventArgs) Handles lstFileName.SelectedIndexChanged
        Dim FullPath As String
        ''確認用のソース 
        'If lstFileName.SelectedIndex < 0 Then 
        '    Console.WriteLine("未選択状態です。") 
        '    Exit Sub 
        'End If 

     '未選択状態なら処理を抜ける 
        If lstFileName.SelectedIndex < 0 Then Exit Sub

        FullPath = FullPaths(lstFileName.SelectedIndex)

        WebBrowser1.Navigate(FullPath)

        Me.Text = Application.ProductName & " - " & FullPath
    End Sub
投稿者 kmkm  (社会人) 投稿日時 2009/11/8 00:26:14
コードを全てはりつけてもらえませんか?

9月にやったばかりなのでデザインは残っています。
なにかつまづいた場所があったかどうかも記憶ない。。。
投稿者 NEON  (社会人) 投稿日時 2009/11/7 23:25:19
Microsoft Visual Basic 2008 Express Edition を使っています。
私も そろそろ塾の時間 さんと同じで卒業制作の3-3で詰まっています。
ビルドエラーではないのですが、3-2-3 確認 の項目までは問題なく動作していました。
そして、3-3のコードをコピーして実行してみたところ
lstFileNameにドロップしたファイル名が表示されるところまでは問題ないのですが
ファイルを選択した瞬間にフリーズし、

ArgumentOutOfRangeExceptionはハンドルされませんでした。
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。パラメータ名:index

と表示され
FullPath = FullPaths(lstFileName.SelectedIndex)
の1行が黄色の塗りつぶしのような表示になります。

卒業制作は目標として
【今回の私の意図は、「細かい部分がよくわからなくても、とにかく実際のアプリケーションを作る手順を体感する」というものです。ですから、よくわからなくても順を追ってアプリケーションを完成させることができた人は今回の目標を達成できたということになります。
私が目指しているのは、新しい発見や、知らなかった操作方法、まだ知らないテクニックにふれることの刺激を感じ取っていただくことです。】
と、ありますので、コピーしただけでとりあえず形になってもらえるとありがたいのですが
うまく行かず壁に当たってしまいました。

そろそろ塾の時間 さんと同じエラーかは分からないのですが、
同じ場所でのエラーだったのでこちらに便乗で質問させていただきました。
よろしくおねがいします。
投稿者 YuO  (社会人) 投稿日時 2009/11/7 09:01:22
「ビルドエラーがある」という情報は,「何かエラーが出た」というだけの情報しかありません。
つまり,実質的には情報を出していないのと同じです。

「ビルドエラー」はどのようなものか,エラーメッセージをコピペしてください。
その際,デフォルトの設定ではユーザー名がパスの中に含まれると思うので,そこの部分は****なり適当に置き換えてください。
投稿者 そろそろ塾の時間  (高校生) 投稿日時 2009/11/7 06:46:45
http://homepage1.nifty.com/rucio/VBNyumon/BEGIN11.htm
URLはここです
ここの3-3でつまずいてしまいます。
一体何が原因なのでしょうか?
投稿者 まだまだ  (中学生) 投稿日時 2009/11/5 07:05:19
たしかVBでは大文字小文字はどちらでも関係ないはずですよ。
多分、WebbrowserコントロールのNameプロパティがかわっているのだと思います。
調べてみてください。
投稿者 葉月  (社会人) 投稿日時 2009/11/4 04:10:14
コードをざっくりと見ただけで動かしていませんが、
恐らく大文字と小文字の違いですね。
コードをよく見比べてください。

誤:webbrowser1
正:WebBrowser1
投稿者 neptune  (社会人) 投稿日時 2009/11/4 04:06:25
>ビルドエラーになってしまうのですが
って、なんのエラー情報も無いんですか?

リンク先も書いておいて下さいね。・・・入門講座の卒業制作の場所 URL
投稿者 そろそろ塾の時間  (高校生) 投稿日時 2009/11/4 02:16:21
VB中学校の入門講座の卒業制作のWebbrowserをプログラミングするところで
入門講座通りwebbrowser1と入力したらビルドエラーになってしまいました
その他のテキストは全て入門講座通りになっていましたが何故かそこだけがビルドエラーになってしまうのですが
どうしてなのでしょう?