環境はVisual Studio2003 WindowsXPです。
実行ファイルと同じフォルダにある画像をサムネイル表示するツールを作ってます。
http://www.atmarkit.co.jp/fdotnet/practprog/index/index.html
で紹介されてるコンポーネントをそのまま使ってます。
最初、ボタンをクリックするたびにサムネイルが表示されるようにつくったら、クリックするたび同じ画像が追加されるので
2回目からは同じ画像が追加されないように作ろうと思ってます。
Dim globalss As String()
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
' 拡張子が .jpg のファイルを列挙する
For Each stFilePath As String In GetFiles(Application.StartupPath, "*.jpg")
If IsNothing(globalss).ToString() = False Then
For i = 0 To globalss.Length - 1
If stFilePath = globalss(i) Then
Return
End If
Next
Dim test As Image = Image.FromFile(stFilePath)
ThumbViewer1.Add(test) 'コンポーネントのサムネイルリストに画像を追加
globalss(globalss.Length - 1) = stFilePath
Else
Dim test As Image = Image.FromFile(stFilePath)
ThumbViewer1.Add(test)
globalss(0) = stFilePath 'ここで落ちる
End If
Next stFilePath
End Sub
Clickイベントの外で配列を宣言してるのがまずいのかうまく動きません。
ヒントなどを教えていただければ幸いです。
よろしくお願いします。
ここで落ちる、じゃなくて、どういう風になるのか、例外が投げられたのならそのメッセージの詳細を書いてください。
今回のは ArgumentNullException でしょうけど。
globalss が初期化されていないようです。長さを指定して初期化する必要があります。
また、配列の長さをあとから変更するには、ReDim ステートメントを使うなどする必要があります。
このような場合は、配列よりも System.Collections.Specialized.StringCollection なんかを使った方が便利です。
追加するときは配列長を気にせず ReDim することもなく Add メソッドを呼び出すだけだし、コレクション内に既に存在しているかどうかのチェックも Contains メソッドを使えば一発です。
フィールドで宣言するときに同時に初期化もしておけば一々イベントメソッド内での Null チェックもする必要がありません。
> If IsNothing(globalss).ToString() = False Then
一々 .ToString() する意味は無いと思います。
おっとうっかり。
ArgumentNullException じゃなくて NullReferenceException のほうですな。
System.Collections.Specialized.StringCollectionを使って作ってみました。
かなり便利にできました。
Dim globalss As StringCollection = New StringCollection
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
Dim test As Image
' 拡張子が .jpg のファイルを列挙する
For Each stFilePath As String In GetFiles(Application.StartupPath, "*.jpg")
If globalss.Count <> 0 Then
For i = 0 To globalss.Count - 1
If globalss.Contains(stFilePath) Then
Return
End If
Next i
test = Image.FromFile(stFilePath)
ThumbViewer1.Add(test) 'コンポーネントのサムネイルリストに画像を追加
globalss.Add(stFilePath)
Else
test = Image.FromFile(stFilePath)
ThumbViewer1.Add(test)
globalss.Add(stFilePath)
End If
Next stFilePath
End Sub
これでボタンを続けて押しても同じ画像が追加されなくなりました。
ありがとうございます。
ツイート | ![]() |