複数のファイルを表示させたい
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/9/15 20:13:33
TextBox1.Text ではなく、ListBox1.Items.Add や、
TextBox1.AppendText を使ってみてください。
最終的に残るのは、最後のループ結果のみになってしまいますよ。
TextBox1.AppendText を使ってみてください。
For Each fname In OpenFileDialog1.FileNames
TextBox1.Text = fname
Next
これだと、ループのたびに Text を「置き換え」ているので、最終的に残るのは、最後のループ結果のみになってしまいますよ。
投稿者 kent  (社会人)
投稿日時
2009/9/15 20:29:30
有り難うございます。下記のコードでもいいんですよね。
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
For Each fname In OpenFileDialog1.FileNames
TextBox1.Text += fname & vbCrLf
next
たいへん厚かましいのですが、画像ファイルを複数読み込んで、自動的に複数のPictureBoxに
読み込ませることは可能でしょうか?
一度に読み込んだ画像ファイルを配列に格納してからPictureBoxに表示するというやり方なのでしょうか?
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
For Each fname In OpenFileDialog1.FileNames
TextBox1.Text += fname & vbCrLf
next
たいへん厚かましいのですが、画像ファイルを複数読み込んで、自動的に複数のPictureBoxに
読み込ませることは可能でしょうか?
一度に読み込んだ画像ファイルを配列に格納してからPictureBoxに表示するというやり方なのでしょうか?
投稿者 よねKEN  (社会人)
投稿日時
2009/9/15 21:52:32
> 下記のコードでもいいんですよね。
追加する方法としてはOKです。
ただし、追記を繰り返す形に変わったので、
For文の前でTextBox1をクリアするといった処理が必要かもしれません。
> 画像ファイルを複数読み込んで、自動的に複数のPictureBoxに
読み込ませることは可能でしょうか?
「TextBox1.Text += fname & vbCrLf」
この処理の場所で同様にfnameを使って、PictureBoxに読み込ませるコードを書けばよいでしょう。
追加する方法としてはOKです。
ただし、追記を繰り返す形に変わったので、
For文の前でTextBox1をクリアするといった処理が必要かもしれません。
> 画像ファイルを複数読み込んで、自動的に複数のPictureBoxに
読み込ませることは可能でしょうか?
「TextBox1.Text += fname & vbCrLf」
この処理の場所で同様にfnameを使って、PictureBoxに読み込ませるコードを書けばよいでしょう。
投稿者 kent  (社会人)
投稿日時
2009/9/15 22:08:29
>「TextBox1.Text += fname & vbCrLf」
>この処理の場所で同様にfnameを使って、PictureBoxに読み込ませるコードを書けばよいでしょう
有り難うございます。
しかし、これでは同じ画像が並んでしまうのですが
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
TextBox1.Text = ""
For Each fname In OpenFileDialog1.FileNames
TextBox1.Text += fname & vbCrLf
PictureBox1.Image = Image.FromFile(fname)
PictureBox2.Image = Image.FromFile(fname)
PictureBox3.Image = Image.FromFile(fname)
PictureBox4.Image = Image.FromFile(fname)
PictureBox5.Image = Image.FromFile(fname)
Next
>この処理の場所で同様にfnameを使って、PictureBoxに読み込ませるコードを書けばよいでしょう
有り難うございます。
しかし、これでは同じ画像が並んでしまうのですが
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
TextBox1.Text = ""
For Each fname In OpenFileDialog1.FileNames
TextBox1.Text += fname & vbCrLf
PictureBox1.Image = Image.FromFile(fname)
PictureBox2.Image = Image.FromFile(fname)
PictureBox3.Image = Image.FromFile(fname)
PictureBox4.Image = Image.FromFile(fname)
PictureBox5.Image = Image.FromFile(fname)
Next
投稿者 YuO  (社会人)
投稿日時
2009/9/15 22:23:20
最初と同じ間違いをしていますよ。
PictureBox1.ImageにはOpenFileDialog1.FileNames(0)のイメージを,
PictureBox2.ImageにはOpenFileDialog1.FileNames(1)のイメージを,
etc...
というように,それぞれ別々のイメージをロードしなければいけません。
PictureBox1.ImageにはOpenFileDialog1.FileNames(0)のイメージを,
PictureBox2.ImageにはOpenFileDialog1.FileNames(1)のイメージを,
etc...
というように,それぞれ別々のイメージをロードしなければいけません。
投稿者 kent  (社会人)
投稿日時
2009/9/15 22:41:39
有り難うございます。
このワザは知りませんでした。(あちらこちら調べまわったのですが、なかなかみつけられませんでした)
しかし、このような冗長なコードでいいのですか?
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
Dim fname1 As String
Dim fname2 As String
Dim fname3 As String
Dim fname4 As String
fname = OpenFileDialog1.FileNames(0)
fname1 = OpenFileDialog1.FileNames(1)
fname2 = OpenFileDialog1.FileNames(2)
fname3 = OpenFileDialog1.FileNames(3)
fname4 = OpenFileDialog1.FileNames(4)
PictureBox1.Image = Image.FromFile(fname)
PictureBox2.Image = Image.FromFile(fname1)
PictureBox3.Image = Image.FromFile(fname2)
PictureBox4.Image = Image.FromFile(fname3)
PictureBox5.Image = Image.FromFile(fname4)
このワザは知りませんでした。(あちらこちら調べまわったのですが、なかなかみつけられませんでした)
しかし、このような冗長なコードでいいのですか?
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fname As String
Dim fname1 As String
Dim fname2 As String
Dim fname3 As String
Dim fname4 As String
fname = OpenFileDialog1.FileNames(0)
fname1 = OpenFileDialog1.FileNames(1)
fname2 = OpenFileDialog1.FileNames(2)
fname3 = OpenFileDialog1.FileNames(3)
fname4 = OpenFileDialog1.FileNames(4)
PictureBox1.Image = Image.FromFile(fname)
PictureBox2.Image = Image.FromFile(fname1)
PictureBox3.Image = Image.FromFile(fname2)
PictureBox4.Image = Image.FromFile(fname3)
PictureBox5.Image = Image.FromFile(fname4)
投稿者 ?-?  (その他)
投稿日時
2009/9/15 23:02:33
> しかし、このような冗長なコードでいいのですか?
気になるなら、繰り返し処理で処理してみたらどうでしょう?
気になるなら、繰り返し処理で処理してみたらどうでしょう?
投稿者 よねKEN  (社会人)
投稿日時
2009/9/15 23:21:31
> しかし、このような冗長なコードでいいのですか?
よいかどうかを決めるのはkentさん次第です。
仕様(期待する動作)を満たしているなら、まずはOKでしょう。
満たしていないなら、そちらを解決するのが先だと思います。
その上で、より綺麗なコードにならないかを考えるのはよいことです。
で、問題がないかどうかについてですが、例えば、
選択されるファイル数が5つ以外だった場合にエラーになりますね。
私だったらどうするかという一例を以下に示します。
--
'前提:選択する画像の数は配置しているPictureBoxの数と同じにしてもらう、という仕様としています。
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim pictureBoxes() As PictureBox = New PictureBox(){ _
PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5 }
If OpenFileDialog1.FileNames.Length = pictureBoxes.Length Then
TextBox1.Text = ""
For fileIndex As Integer = 0 To pictureBoxes.Length - 1
Dim fname As String = OpenFileDialog1.FileNames(fileIndex)
TextBox1.Text &= fname & vbCrLf
Using fs As Stream = New FileStream(fname)
pictureBoxes(fileIndex).Image = Image.FromStream(fs, FileMode.Open)
End Using
Next
Else
MessageBox.Show("ファイルは" & pictureBoxes.Length.ToString() & "つ選択してください。")
End If
End If
--
このコードではPictureBox1~PitucreBox5への画像の設定をループ処理で行うために、
PictureBox1~PitucreBox5をPictureBoxの配列に予め設定するようしている
ところがポイントです。
#Using句を使っていたり、Image.FromFileの代わりにImage.FromStreamを使うように修正
#していますが、この辺りは、ご質問の本題とは無関係ですので、あまり気になさらずに・・・
よいかどうかを決めるのはkentさん次第です。
仕様(期待する動作)を満たしているなら、まずはOKでしょう。
満たしていないなら、そちらを解決するのが先だと思います。
その上で、より綺麗なコードにならないかを考えるのはよいことです。
で、問題がないかどうかについてですが、例えば、
選択されるファイル数が5つ以外だった場合にエラーになりますね。
私だったらどうするかという一例を以下に示します。
--
'前提:選択する画像の数は配置しているPictureBoxの数と同じにしてもらう、という仕様としています。
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim pictureBoxes() As PictureBox = New PictureBox(){ _
PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5 }
If OpenFileDialog1.FileNames.Length = pictureBoxes.Length Then
TextBox1.Text = ""
For fileIndex As Integer = 0 To pictureBoxes.Length - 1
Dim fname As String = OpenFileDialog1.FileNames(fileIndex)
TextBox1.Text &= fname & vbCrLf
Using fs As Stream = New FileStream(fname)
pictureBoxes(fileIndex).Image = Image.FromStream(fs, FileMode.Open)
End Using
Next
Else
MessageBox.Show("ファイルは" & pictureBoxes.Length.ToString() & "つ選択してください。")
End If
End If
--
このコードではPictureBox1~PitucreBox5への画像の設定をループ処理で行うために、
PictureBox1~PitucreBox5をPictureBoxの配列に予め設定するようしている
ところがポイントです。
#Using句を使っていたり、Image.FromFileの代わりにImage.FromStreamを使うように修正
#していますが、この辺りは、ご質問の本題とは無関係ですので、あまり気になさらずに・・・
投稿者 あにす  (社会人)
投稿日時
2009/9/16 01:04:08
読み込む画像の数が不定ならその場で必要なだけ作るのもいいと思います。
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
For Each file As String In OpenFileDialog1.FileNames()
Dim pictureBox As New PictureBox()
pictureBox.Image = Image.FromFile(file)
pictureBox.Size = pictureBox.Image.Size
Me.FlowLayoutPanel1.Controls.Add(pictureBox)
pictureBox.Show()
Next
End If
投稿者 kent  (社会人)
投稿日時
2009/9/16 04:21:50
奥が深いですね。おもわずため息がでました。
道は遠いですが、一歩ずつ階段をのぼるように学びを深めていきたいと思っています。
みなさん、ありがとうございます。
道は遠いですが、一歩ずつ階段をのぼるように学びを深めていきたいと思っています。
みなさん、ありがとうございます。
MultiselectプロパティをTrueにしていますが、5つのファイルを選択しても
最後のファイル名しか表示されません。
If OpenFileDialog1.ShowDialog( ) = Windows.Forms.DialogResult.OK Then
Dim fname As String
For Each fname In OpenFileDialog1.FileNames
TextBox1.Text = fname
Next