質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

解決済

VisualStudioでPictureBoxを表示させる制御について

asd_poi
asd_poi

総合スコア1

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2回答

0グッド

0クリップ

335閲覧

投稿2022/11/15 06:41

編集2022/11/16 23:16

前提

VisualStudioを利用し、画像ページを複数枚見せるためのアプリを作成したい

実現できていること

  • 各ページに対応するボタンを配置し、ボタンを押すと各ページを表示させる

実現したいこと

  • 前頁・次頁ボタンだけで画像を順番に切り替える
  • 10秒ごとに画像を切り替える

発生している問題・エラーメッセージ

PictureBoxをBringToFrontしていると、現在の表示が分からないと次頁に移行できない(やり方が分からない) Timer1で2枚目を表示、そのあと3枚目を表示する方法が分からない

該当のソースコード

Windows 10 の Visual Studio 2022 で Windows Forms アプリを作っています。 ターゲットフレームワーク .NET Framework 4.7.2で作っています。 Public Class Form1 Private Sub BindingNavigator1_RefreshItems(sender As Object, e As EventArgs) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click PictureBox1.BringToFront() Button1.BringToFront() Button2.BringToFront() Button3.BringToFront() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click PictureBox2.BringToFront() Button1.BringToFront() Button2.BringToFront() Button3.BringToFront() End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click PictureBox3.BringToFront() Button1.BringToFront() Button2.BringToFront() Button3.BringToFront() End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick PictureBox2.BringToFront() Button1.BringToFront() Button2.BringToFront() Button3.BringToFront() End Sub Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick PictureBox3.BringToFront() Button1.BringToFront() Button2.BringToFront() Button3.BringToFront() End Sub End Class

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/15 10:02依頼された後にこの質問は修正されています

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

SurferOnWww

2022/11/15 07:11

何を何で作っているか書いてください。(例: Windows 10 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか)
asd_poi

2022/11/15 08:42

Windows 10 の Visual Studio 2022 で Windows Forms アプリを作っています。 ターゲットフレームワーク .NET Framework のバージョンまでは分かっていません。
SurferOnWww

2022/11/15 08:53

> .NET Framework のバージョンまでは分かっていません。 .NET Core / .NET なのか .NET Framework なのか、どっちですか? それもわからずアプリを作るということはないはずですけど。
SurferOnWww

2022/11/15 08:55

自分ではどこまでコードが書けていて、どこでつまずいていて、何がわかれば解決できるかを、自分が書いたコードを提示して説明願います。
asd_poi

2022/11/15 08:56

それは前に記載の通り.NET Frameworkです。
asd_poi

2022/11/15 09:03

コードを追記しました。 Button1を押すとPictureBox1を表示、Button2を押すとPictureBox2を表示、は分かったのですが、 次頁ボタンでPictureBox1⇒PictureBox2に遷移させる方法が分からないのと、 10秒ごとにPictureBox1⇒PictureBox2へ遷移させるためのTimerの使い方が分かりません。
SurferOnWww

2022/11/15 14:36

> それは前に記載の通り.NET Frameworkです。 プロジェクトのプロパティを見ればバージョンが分かるのでそれを書いてください。
asd_poi

2022/11/16 04:15

確認方法のご教示ありがとうございます。.NET Framework 4.7.2でした。
SurferOnWww

2022/11/16 07:44

> .NET Framework 4.7.2でした。 質問欄を編集してその情報を追記願います。
SurferOnWww

2022/11/16 22:15

質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
asd_poi

2022/11/16 23:21

>質問欄を編集してその情報を追記願います。 追記しました。 >とにかく無言は NG です。 パソコン自体確認できなかったため今になりました。遅いですか? >それに対するフィードバックを返してください。 この後確認してフィードバックします。
SurferOnWww

2022/11/17 00:00

> 遅いですか? 遅いと思ってないんですか?
asd_poi

2022/11/17 01:41

>遅いと思ってないんですか? はい。思っていません。
SurferOnWww

2022/11/17 03:14

それは社会人としていかがなものかと思うのですが? (社会人ではない?) 例えば、あなたがあなたの問題を解決するために会議を招集して赤の他人に集まってもらい、参加者からいろいろ提案を受けることができたが、主催者であるあなたが途中で席を外してどこかに行ってしまったようなものです。急用とかで席を外さざるを得ない状況とかはあるかもしれませんが、突然黙って席を外すことは NG だっていうことは分かりますよね。 それと似たような話です。
SurferOnWww

2022/11/17 03:16

なんにせよ解決したそうですのでベストアンサーをつけてこのスレッドはクローズ願います。
asd_poi

2022/11/17 04:10

返信が翌日になっただけで離席に例える意味が分かりません。 それってあなたの感想ですよね?笑 何時間以内にコメントをしなければならないという基準とそのソースを提示ください。
SurferOnWww

2022/11/17 05:06

> それってあなたの感想ですよね? いえいえ、タイムリーに返事する、できない事情があればその旨伝えて待ってもらうようお願いするというのは、ごく普通の常識ですよ。 そういう常識は貴方にはないのかもしれませんが、返事が翌日と言うのは遅いと思う者がいるのは覚えておいてください。
asd_poi

2022/11/17 05:22

>返事が翌日と言うのは遅いと思う者がいる 思うだけにして、それを他人に強いるのはやめましょう。皆が24時間張り付けるわけではありません。
SurferOnWww

2022/11/17 05:47

いや、今後も督促はしますよ。督促されるのが嫌なら、今後は質問の最初に「オレは自分の都合優先だから、回答をもらっても返信はいつになるかわからない」って書いといてください。そうすれば自分はスルーするし、あなたは督促されることもなく、お互いハッピー。それでは誰も回答してくれなくなるかもしれないけどね。
asd_poi

2022/11/17 05:53

>督促されるのが嫌なら、今後は質問の最初に「オレは自分の都合優先だから、回答をもらっても返信はいつになるかわからない」って書いといてください。 嫌です。笑 >それでは誰も回答してくれなくなるかもしれないけどね。 それってあなたの感想ですよね。笑
SurferOnWww

2022/11/17 11:59 編集

> それってあなたの感想ですよね。笑 ヒロユキ崇拝者なのかな? そういうことを言うとうれしい? こんどあなたの質問を見つけたら、この質問者は「オレは自分の都合優先だから、回答をもらっても返信はいつになるかわからない」って言う人だとコメント欄に書いてあげましょう。それでどうなるか? 楽しみにしておいてください。

回答2

0

ベストアンサー

PictureBox は一つにして、画像の枚数分 Image オブジェクトを作り、PictureBox.Image プロパティを差し替えるという案はいかがですか?

例えば画像が以下のように Images フォルダにあるとして、

イメージ説明

以下のようなコードで、

VBNET

1Public Class Form1 2 Private index As Integer 3 Private images As List(Of Image) 4 5 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 6 Dim applicationPath = Application.ExecutablePath 7 Dim index = applicationPath.LastIndexOf(ChrW(&H5C)) 8 Dim folder = applicationPath.Substring(0, index + 1) 9 Dim files = {"sample1.jpg", "sample2.jpg", "sample3.jpg"} 10 images = New List(Of Image) 11 12 For Each item As String In files 13 Dim filePath = folder & "Images\" & item 14 images.Add(Image.FromFile(filePath)) 15 Next 16 17 index = 0 18 PictureBox1.Image = images(index) 19 Label1.Text = $"Page {index + 1} of {images.Count}" 20 End Sub 21 22 Private Sub Pre_Click(sender As Object, e As EventArgs) Handles Pre.Click 23 If index > 0 Then 24 index -= 1 25 PictureBox1.Image = images(index) 26 Label1.Text = $"Page {index + 1} of {images.Count}" 27 End If 28 End Sub 29 30 Private Sub Nex_Click(sender As Object, e As EventArgs) Handles Nex.Click 31 If index < images.Count - 1 Then 32 index += 1 33 PictureBox1.Image = images(index) 34 Label1.Text = $"Page {index + 1} of {images.Count}" 35 End If 36 End Sub 37End Class

実行結果は以下のようになります。

イメージ説明

Timer のクリックイベントを使っても同様なことはできると思います。

投稿2022/11/16 07:43

SurferOnWww

総合スコア17328

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

asd_poi

2022/11/17 01:40

ご教示いただいた案でページ遷移・タイマーともに無事実行できました。 ありがとうございました。

0

まずはページ数を引数として持つ指定ページを表示するメソッドを作ってみましょう

VBNET

1Private Sub ShowPage(PageNo As Integer) 2 'ここでPageNoによって表示するページを判断しそのページを表示する処理を作成する 3End Sub

この関数が作成できたら、現在ボタン1~3で行っていることを

VBNET

1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 2 ShowPage(1) 3 End Sub

といった感じで作成したメソッドを利用して表示するようにしてみましょう

その後「前項」「次項」のボタンを作成し、その処理で

VBNET

1 Private Sub NextButton_Click(sender As Object, e As EventArgs) Handles NextButton.Click 2 '下記は例としてNowPageという変数を使用するよう書いていますが、 3 '現在表示しているページを格納する変数を用意してそれを用いてページを指定しましょう 4 NowPage += 1 5 ShowPage(NowPage) 6 End Sub

といった感じで制御すればよろしいかと思います。

タイマーでの切り替えも現在表示しているページを変化させて表示用のメソッドを呼べばいいでしょう。

投稿2022/11/15 21:23

YAmaGNZ

総合スコア9439

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

asd_poi

2022/11/16 04:17

回答ありがとうございます。 現在独立した3つの画像があり、それぞれPictureBox1~3に入れているのですが、 それらをPageNoとして扱うにはどのようにすれば良いのでしょうか。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。