C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[12]: 画像を次々と表示する。


(過去ログ 109 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■63950 / inTopicNo.1)  画像を次々と表示する。
  
□投稿者/ mizu (5回)-(2012/10/31(Wed) 11:54:40)

分類:[.NET 全般] 

指定のフォルダから画像を選択してその画像を表示させたいんですが、ボタンを押してもなぜか次々と画像が表示されません。
指定フォルダの中には画像1、画像2、画像3という名前でそれぞれ入ってるのですが画像1しか読み込みません

下のコードがその内容なんですが何か手を加える場所があれば回答の方をお願いします。


Private Sub ToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem3.Click
'PictureBox1に次の画像を表示するする。
If i < 5 Then
PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & 1 & ".png")

Else
i = 0

PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i + 1 & ".png")
End If

i = i + 1

End Sub

Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
'PictureBox1に前の画像を表示する
If i > 5 Then
PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & 5 & ".png")
Else
i = 4
PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i - 1 & ".png")
End If

i = i - 1

End Sub
引用返信 編集キー/
■63953 / inTopicNo.2)  Re[1]: 画像を次々と表示する。
□投稿者/ 玉三郎 (2回)-(2012/10/31(Wed) 14:18:54)
> Private Sub ToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem3.Click
> 'PictureBox1に次の画像を表示するする。
> If i < 5 Then
> PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & 1 & ".png")
>
> Else
> i = 0
>
> PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i + 1 & ".png")
> End If
>
> i = i + 1
>
> End Sub

ただのコードミスでしょう。
iという変数がどこでどのように定義されているか分かりませんが、
このコードでは、常に画像1が表示されてしまいますよ。

i < 5の間は、("\\sv1\public\2年生\testGazou\画像" & 1 & ".png")で画像1.pngを表示
i が 5になったら、i=0となり、("\\sv1\public\2年生\testGazou\画像" & i + 1 & ".png")となるのでやはり画像1.pngを表示
引用返信 編集キー/
■63956 / inTopicNo.3)  Re[2]: 画像を次々と表示する。
□投稿者/ howling (25回)-(2012/10/31(Wed) 15:39:37)
…iが5未満だったら画像1を表示して、
それ以外だったらiを0にして、
画像の0+1=1番目、つまり画像1を表示する。

画像1枚しか持ってないというオチを期待。
引用返信 編集キー/
■64009 / inTopicNo.4)  Re[3]: 画像を次々と表示する。
□投稿者/ mizu (8回)-(2012/11/02(Fri) 09:53:17)
howling さん 玉三郎さん

コメントありがとうございます。
自分としてもコードがおかしいと思いましたが。
いかんせん、何がおかしいのかがわからないいもので・・・^^;


画像はちゃんと複数枚保存してあります。
iはDim i As Integer = 0で定義してあります。

回答の方お願いしますm(__)m


引用返信 編集キー/
■64014 / inTopicNo.5)  Re[4]: 画像を次々と表示する。
□投稿者/ 玉三郎 (3回)-(2012/11/02(Fri) 12:31:33)
だから、

> If i < 5 Then
> PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & 1 & ".png")

だと、画像は常に"\\sv1\public\2年生\testGazou\画像1.png"なので、画像1.pngしか読み込まれませんよ。
ここは、

If i < 5 Then
    PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & (i + 1).ToString & ".png")

とすべきでしょう。

ただ、i = 5になった時にiをリセット(= 0)するので、ToolStripMenuItem3_Clickの中身は以下のようになると思うのですが、どうでしょう。

Private Sub ToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem3.Click
    'PictureBox1に次の画像を表示するする。
    If i = 5 Then
        i = 0
    End If

    PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & (i + 1).Tostring & ".png")

    i += 1
End Sub

引用返信 編集キー/
■64015 / inTopicNo.6)  Re[5]: 画像を次々と表示する。
□投稿者/ howling (36回)-(2012/11/02(Fri) 14:39:02)
そういえば、この質問には開発環境が書かれていないので書いておいてください。
(どの質問でもそうです)

その上で、VisualStudioを使っているのならデバッグできないのかなぁ…?
できないのならVBなんてやりたくない…おぉっと(笑
普段C#とVB一緒に見てますからねぇ。
引用返信 編集キー/
■64016 / inTopicNo.7)  Re[6]: 画像を次々と表示する。
□投稿者/ shu (84回)-(2012/11/02(Fri) 15:41:43)
2012/11/02(Fri) 15:48:16 編集(投稿者)
提示コードを正すならこんな感じがシンプルで良いと思います。

Private i as Integer = 0

Private Sub ToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem3.Click
    i = (i mod 5) + 1

    PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i.Tostring & ".png")
End Sub



ただフォルダに『画像<番号>』というファイル名で欠番なく保存されていなければならず汎用性に欠ける気がします。
以下のようにフォルダ内のファイル名をすべて取得して条件にあうものを表示するとよいかと思います。


'PictureFolder を指定したらPicFilesをNothingに設定するようにするといろいろフォルダを指定することが出来るようになります。
    Public PictureFolder As String = "C:\Users\Public\Pictures\Sample Pictures\"
    Private PicFiles() As String = Nothing
    Private Index As Integer = -1

    Private Sub ToolStripMenuItem3_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripMenuItem3.Click
        If PicFiles Is Nothing Then
            PicFiles = IO.Directory.GetFiles(PictureFolder, "*.png")
            '--- ここでPicFilesをさらに条件にあう画像に絞ってもよいかもしれません。
            Index = 0
        End If
        PictureBox1.ImageLocation = (PicFiles(Index))
        '--- IndexのループはModを使うとIfを書かなくて良いので楽です。
        Index = (Index + 1) Mod PicFiles.Length
    End Sub

引用返信 編集キー/
■64078 / inTopicNo.8)  Re[7]: 画像を次々と表示する。
□投稿者/ mizu (9回)-(2012/11/07(Wed) 10:44:09)
みなさんの、コードを参考にした結果「画像を次々と表示させる」処理はできました。
これを、応用して前の画像を表示させるようにしようとしたんですが。


Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
        'PictureBox1に前の画像を表示する
        If i = 0 Then

            i = 5
        End If
        PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i - 1 & ".png")
        i -= 1

    End Sub

この、コードだと最初はiが0なのでiが5になり「PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i - 1 & ".png")」
ここの処理でiが4になり「画像4」が表示されるようになってしまいます。

それを、改善するためにi=0の時i=6になるようにしたところ「画像5」から4、3、2、1と表示されるようになりました。
しかし、なぜか知らないですけど「画像1」が表示されたあとに前の画像を表示させるボタンをクリックすると
画像を認識しないエラーのアイコンが表示されます。
そのあとに、画像5がまた表示されるようになるんですがこのエラーの原因がわかりません^^;
自分の考えとしては、iが1なった時iが-1されるのであるはずもない「画像0」というものが表示されたんだと考えています。
これの、解決策をお願いしますm(__)m


ちなみに、フォルダに入ってる画像は「画像1.png」から「画像5.png」までです。

引用返信 編集キー/
■64079 / inTopicNo.9)  Re[8]: 画像を次々と表示する。
□投稿者/ ヴァン (8回)-(2012/11/07(Wed) 10:52:40)
こんにちは。

> 自分の考えとしては、iが1なった時iが-1されるのであるはずもない「画像0」というものが表示されたんだと考えています。

であれば、

> PictureBox1.ImageLocation = ("\\sv1\public\2年生\testGazou\画像" & i - 1 & ".png")

この行にブレークポイントを付けて実行して i の中身を確認してみてください。
この程度が出来ないと先に進めませんよ。

>iが1なった時iが-1されるのであるはずもない
> \画像" & i - 1 & ".png")

引用返信 編集キー/
■64082 / inTopicNo.10)  Re[9]: 画像を次々と表示する。
□投稿者/ mizu (11回)-(2012/11/07(Wed) 11:17:23)
ヴァンさんコメントありがとうございます。

ブレークをつけた結果値としては正常に動いていますが、画像が表示される時どうしても読み込まない画像が出てきます。
これは、何故なのでしょうか?
引用返信 編集キー/
■64084 / inTopicNo.11)  Re[10]: 画像を次々と表示する。
□投稿者/ mizu (12回)-(2012/11/07(Wed) 11:31:53)
追記、iの値が5の時に処理としては、画像0が表示されようとします。

引用返信 編集キー/
■64086 / inTopicNo.12)  Re[11]: 画像を次々と表示する。
□投稿者/ howling (45回)-(2012/11/07(Wed) 11:52:57)
mizuさん

いや、あのね?デバッグっていうのがどういう物かをまず理解していないような気がします。
ブレークポイントというものを仕掛けると、そこで処理が止まりますよね?
その処理が止まっている時の、各変数の値が見れるようになっているはずです。
わからない場合は先生に聞いたりしてください。2年生って書いてあるあたり、学生さんなのでしょうから。

貴方は初期値を0としました。
初期値で0として、最初にif文で0だったら、とするのはまずナンセンスですよ。
もちろん、最初に必ず通したい初期化処理なら構いませんが。(それでも好きじゃないですが)

まずは、ブレークポイントで値を見てください。
値が正しいとみなすのは、そのまま10回くらいはループさせてから考えた方が良いのでは?
「1回ブレークポイントを仕掛けて止まった時に正しい状態だった」じゃあ次は?その次は大丈夫だった?
そうすれば見えてくると思います。
そこから、どうすれば1〜5の値に収まるのかを考えてください。

最後に。
プログラマーとしてやっていくのなら、5枚の画像を表示する時に1〜5となる考えはやめておいた方がいいです。
5枚表示するなら0〜4で。常に初期値は0で。
できれば、ファイル名も全角入れずに半角のみ、とかの方が後々助かると思います。
もちろん、ぶち当たることも重要なので、こちらはどちらでも良いですが。

引用返信 編集キー/
■64088 / inTopicNo.13)  Re[10]: 画像を次々と表示する。
□投稿者/ ヴァン (9回)-(2012/11/07(Wed) 12:03:18)
No64082 (mizu さん) に返信
> ヴァンさんコメントありがとうございます。
>
> ブレークをつけた結果値としては正常に動いていますが、画像が表示される時どうしても読み込まない画像が出てきます。
> これは、何故なのでしょうか?

ブレークポイントを付けて実行を何回行いましたか?


>追記、iの値が5の時に処理としては、画像0が表示されようとします。

本当ですか?

i が 5 の時どんなファイル名になりますか?
i が 4 の時どんなファイル名になりますか?
i が 3 の時どんなファイル名になりますか?
i が 2 の時どんなファイル名になりますか?
i が 1 の時どんなファイル名になりますか?




引用返信 編集キー/
■64645 / inTopicNo.14)  Re[11]: 画像を次々と表示する。
□投稿者/ なんし (1回)-(2012/12/13(Thu) 10:20:21)

>これはアメリカのゲームです。1度やってみてください。
これは、たった3分でできるゲームです。試してみてください。
驚く結果をご覧いただけます。
このゲームを考えた本人は、メールを読んでからたった10分で願い事がかなったそうです。このゲームは、おもしろく、かつ、あっと驚く結果を貴方にもたらすでしょう。

約束してください。絶対に先を読まず、1行ずつ進む事。
たった3分ですから、ためす価値ありです。


まず、ペンと、紙をご用意下さい。
先を読むと、願い事が叶わなくなります。


1,まず、1番から、11番まで、縦に数字を書いてください。


2,1番と2番の横に好きな3〜7の数字をそれぞれお書き下さい。


3,3番と7番の横に知っている人の名前をお書き下さい。(必ず、興味のある性別名前を書く事。男なら女の人、女なら男の人、ゲイなら同姓の名前をかく)


必ず、1行ずつ進んでください。先を読むと、なにもかもなくなります。


4,4,5,6番の横それぞれに、自分の知っている人の名前をお書き下さい。これは、家族の人でも知り合いや、友人、誰でも結構です。


まだ、先を見てはいけませんよ!!


5,8、9、10、11番の横に、歌のタイトルをお書き下さい。


6,最後にお願い事をして下さい。


さて、ゲームの解説です。

1)このゲームの事を、2番に書いた数字の人に伝えて下さい。

2)3番に書いた人は貴方の愛する人です。

3)7番に書いた人は、好きだけれど叶わぬ恋の相手です。

4)4番に書いた人は、貴方がとても大切に思う人です。

5)5番に書いた人は、貴方の事をとても良く理解してくれる相手です。

6)6番に書いた人は、貴方に幸運をもたらしてくれる人です。

7)8番に書いた歌は、3番に書いた人を表す歌。

8)9番に書いた歌は、7番に書いた人を表す歌。

9)10番に書いた歌は、貴方の心の中を表す歌。

10)そして、11番に書いた歌は、貴方の人生を表す歌です。


この書き込みを読んでから、1時間以内に10個の掲示板にこの書き込みをコピーして貼って下さい。


そうすれば、あなたの願い事は叶うでしょう。もし、貼らなければ、願い事を逆のことが起こるでしょう。とても奇妙ですが当たってませんか?
引用返信 編集キー/
■64676 / inTopicNo.15)  Re[12]: 画像を次々と表示する。
□投稿者/ ぱしり (1回)-(2012/12/15(Sat) 19:14:23)
2012/12/15(Sat) 19:20:48 編集(投稿者)


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -