掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PictureBoxについて (ID:141172)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
アクアと申します。どうぞ宜しくお願いします。 ケイスケさんと同じ方ではないかもしれませんが、 http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=23687&rev=&no=0 の、kei03さんのご質問と関連性が高いので、より詳しい提示がなされている どぼん!さんの掲示板の内容も踏まえて助言申し上げます。 尚、私の開発環境はOS: Windows Vista Ultimate SP1 、開発ツール:Visual Studio 2008 Professional Editionです。 まずこの掲示板のご質問では > PictureBoxでどの画像が表示されているのか判定したいのですが・・・ とあります。 私ならば複数の画像を管理する方法として、配列やコレクションを使う方法が、まず頭に思い浮かびます。 配列やコレクションであればインデックスでどの画像であるか判定可能である為です。 では、画像を格納する目的で使用する 配列やコレクションで何か良い方法はないだろうか?という事になるのですが、 Visual Basic 2008 の IDEにあるツールボックスに目を通してみると、ImageListコンポーネントを確認できます。 ImageListはImageオブジェクトのコレクションを管理するクラスですので、今回のご質問であればこれを使ってみても良いと思います。 今回の質問の核となる部分のアドバイスは以上ですが、以下にImageListを使ったアプリケーションの簡単なサンプルを提示しますので参考にしてみてください。 まず、新しいWindowsフォームプロジェクトを作成し、 Buttionコントロールを4つ Labelコントロールを1つ PictureBoxコントロールを1つ ImageListコンポーネントを1つ Timerコンポーネントを1つ この時、PictureBoxコントロールのSizeプロパティを240,240に設定し、残りのコントロールについては適当に配置を調整して下さい。 コードデザイナの画面で以下のコードを打ち込んでください。 Public Class Form1 Private imageFileNames() As String Private image As System.Drawing.Image ' 取得したImageオブジェクトを格納する変数 Private currentIndex As Integer ' 現在選択されているインデックスを格納する変数 Private lastIndex As Integer ' インデックスの最大値を格納する変数 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' 主要コントロールのプロパティを設定する。 Button1.Text = "読込" Button2.Text = "前の画像" Button3.Text = "次の画像" Button4.Text = "ランダム" Label1.Text = "ファイル名: " Timer1.Interval = 1000 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fileDir As String = "C:\Users\Pictures" ' ←使用している環境に合わせて設定して下さい。 ' 拡張子がjpgの画像を取得 imageFileNames = System.IO.Directory.GetFiles(fileDir, "*.jpg") ' ImageList1のプロパティを設定 ImageList1.ColorDepth = ColorDepth.Depth24Bit ' 画像のイメージ リストの色深度を設定 ImageList1.ImageSize = New Size(240, 240) ' コレクションに格納するImageの画像サイズを設定する。 For i As Integer = 0 To imageFileNames.Count - 1 image = Bitmap.FromFile(imageFileNames(i)) ' Imageを取得する ImageList1.Images.Add(image) ' 取得したImageオブジェクトをImageListに追加する。 Next currentIndex = 0 lastIndex = imageFileNames.Count - 1 PictureBox1.Image = ImageList1.Images(currentIndex) ' ファイル名を表示 Label1.Text = "ファイル名: " & System.IO.Path.GetFileName(imageFileNames(currentIndex)) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If currentIndex = lastIndex Then currentIndex = 0 Else currentIndex += 1 End If PictureBox1.Image = ImageList1.Images(currentIndex) Label1.Text = "ファイル名: " & System.IO.Path.GetFileName(imageFileNames(currentIndex)) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If currentIndex = 0 Then currentIndex = lastIndex Else currentIndex -= 1 End If PictureBox1.Image = ImageList1.Images(currentIndex) Label1.Text = "ファイル名: " & System.IO.Path.GetFileName(imageFileNames(currentIndex)) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click ' タイマーの実行状態の切り替え Timer1.Enabled = Not Timer1.Enabled End Sub Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' ランダム表示 Dim rnd As Random = New Random() Dim randomIndex As Integer = rnd.Next(lastIndex) PictureBox1.Image = ImageList1.Images(randomIndex) Label1.Text = "ファイル名: " & System.IO.Path.GetFileName(imageFileNames(randomIndex)) If randomIndex = 0 Then MessageBox.Show("インデックスの最小値にに該当する画像") ElseIf randomIndex = currentIndex Then MessageBox.Show("インデックスの最大値に該当する画像") Else ' その他はどーでもいいので無視。 End If End Sub End Class (上記のプログラムは私で試しに作ってみたコードのコピペですので段組みはほとんど考慮していません。崩れていたら適当に整形してください。) このサンプルでは指定した画像ファイルをImageオブジェクトとして取得し、そのImageオブジェクトをImageListのコレクションに追加することでインデックス管理を可能にしています。 Button2とButton3のClickイベントで現在のインデックスの値に応じた判定をしています。 どぼん!さんの掲示板に挙がっていた質問はTimer1のTickイベント内で判定と処理を行っていますので、数ある方法の一つとして参考にしてみてください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.