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

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

新規登録して質問してみよう
ただいま回答率
85.31%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Q&A

1回答

747閲覧

変数に変数を代入させたいです

koumekoume333

総合スコア0

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

0グッド

0クリップ

投稿2023/07/25 21:38

編集2023/07/26 02:57

やりたいこと

イメージリストによってピクチャーボックス内に連続で表示される画像がストップしたとき、そのストップした画像を変数に格納しようとしています。

そこで、n(0)にimage0を代入させるコードを書いたところエラーが出ました。

前提

システムとしては、
登録番号0~2の画像で止まる→それぞれの画像をお題として問題を解く(お題別に正解が分岐する)
というのを目指しています。

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

'Image' の値を 'Boolean' に変換できません  
→8行目 If image0 Then
→10行目  ElseIf image1 Then

'Image' の値を 'Stringer' に変換できません
→9行目  n(0) = image0
→11行目  n(1) = image1
→12行目  Else n(2) = image2

該当のソースコード

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click Dim image0 As Image = ImageList1.Images(0) Dim image1 As Image = ImageList1.Images(1) Dim image2 As Image = ImageList1.Images(2) If image0 Then n(0) = image0 ElseIf image1 Then n(1) = image1 Else n(2) = image2 End If End Sub

試したこと

登録した画像を示す方法を、 Dim image0 As Image = ImageList1.Images(0)と書きました。
これは自分の実力ではなく、自動修復の提案を用いたものです。しかしこれ以外に、どのように表示された画像を指し示せばよいのか分からなかったのでそのまま用い、 If image0 Then 以降のコードを書きました。
ド初心者で無知が光りますが、ご教授いただけるとありがたいです。
また、分かりづらいところがあれば教えていただけると見直すきっかけになるのでありがたいです。

全体のソースコード

Dim ct As Integer
Dim n(2) As String

'お題をシャッフル Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Timer1.Enabled = True End Sub 'ストップ Private Sub Button6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button6.Click Timer1.Enabled = False End Sub 'お題表示 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim gPBox As Graphics = PictureBox10.CreateGraphics() ct = ct + 1 If ct = ImageList1.Images.Count Then ct = 0 ImageList1.Draw(gPBox, 0, 0, ct) End Sub 'お題による結果の条件分岐 ct = ImageList1.Images.Count ←ctの箇所にエラーが出ているので見直しています Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If ct = 0 And (CheckBox2.Checked And CheckBox7.Checked And CheckBox4.Checked = True) Then  'お題: MessageBox.Show("正解!" ) ElseIf ct = 1 And (CheckBox1.Checked And CheckBox7.Checked And CheckBox3.Checked = True) Then 'お題: MessageBox.Show("正解!" ) ElseIf ct = 2 And (CheckBox1.Checked And CheckBox7.Checked And CheckBox8.Checked = True) Then 'お題: MessageBox.Show("正解!" ) Else MessageBox.Show("残念!") End If End Sub

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2023/07/25 22:23

>自動修復(?)の提案に乗っただけ >試した名残です。 こういった中途半端な状態のソースを提示するのではなく、動かなくてもいいので実現したい最小限のソースを提示して、この行でこのようなエラーが出るなどの情報を正確に載せてください。
fana

2023/07/26 01:41 編集

まずは画像表示処理を扱わずに,動作内容のロジック(なんか「お題」が確定して→なんかユーザが選んで→その成否を判定する)部分だけを作ってみるのが早そうかな,と見えます. そしたらそこに画像を用いる表示系を付け加えるだけですよね. 画像データというのはユーザに状況を表示するためだけに必要なのであって,ロジックの動作を司るものではないのでしょうから. (:ロジック側のデータとしては,現在のお題が「何番目なのか」だけが必要.表示系はその番号に見合う画像を表示するだけの話)
koumekoume333

2023/07/26 02:11

方法としてとても理解しやすいです。ありがとうございます! ただ、「イメージリストの何番目なのか」を、エラーに出てきた型を使わずに確定させるというのが個人的にとても難しく感じます。他の方の回答にあるように、VB.NETではほぼ出来ない話なのでしょうか?それとも自分の力量に見合っていないだけなのか、教えていただきたいです。
YAmaGNZ

2023/07/26 02:14

If image0 Then これは何を判断したいのですか? n(0) = image0 nはstring型の配列ですが、この代入で何を入れようと考えていますか? image0は絵ですので文字列ではありません。 前に提示されていたコードですと、タイマーで画像を切り替えていたかと思います。 その時、ctという変数で何番目の画像を表示するかを制御していたかと思います。 なので、どの画像が表示されているかというのはctという変数を判断すればいいかと思います。
Zuishin

2023/07/26 02:21

この質問もそうですが、出来ないという「他の方の回答」も何のことやらさっぱりなので、もう少し人それぞれ独自の理解をしなくて済むよう詳しく説明しないと話が食い違うだけに終わると思います。
koumekoume333

2023/07/26 02:45

If image0 Then n(0) = image0 これは、イメージリスト0番目の画像なら、n(0)にその画像が表示されているという情報が代入される、というのを表そうとしました。 ありがとうございます!早速、下記のように書き換えて試してみたのですが、 間違った回答を選択しても、正解と表示される という結果になりました。 このソースでおかしな点はありますか? If ct = 0 And (CheckBox2.Checked And CheckBox7.Checked And CheckBox4.Checked = True) Then  'お題: MessageBox.Show("正解!" ) ElseIf ct = 1 And (CheckBox1.Checked And CheckBox7.Checked And CheckBox3.Checked = True) Then 'お題: MessageBox.Show("正解!" ) ElseIf ct = 2 And (CheckBox1.Checked And CheckBox7.Checked And CheckBox8.Checked = True) Then 'お題: MessageBox.Show("正解!" ) Else MessageBox.Show("残念!" ) End If
YAmaGNZ

2023/07/26 02:56

>間違った回答を選択しても、正解と表示される 例えばct=0の時はCheckBox2、CheckBox7、CheckBox4の全てがチェックされている場合に「正解」とするのですよね? 間違った回答というのはどのような回答の場合でしょうか? CheckBox2とCheckBox7とCheckBox4にチェックが入っていて、なおかつ別のものにもチェックを入れた状態だったりしませんか?
koumekoume333

2023/07/26 13:48

>CheckBox2とCheckBox7とCheckBox4にチェックが入っていて、なおかつ別のものにもチェックを入れた状態だったりしませんか? ご指摘の通りです。 CheckBox2,7,5,にチェックが入っている状態だと、問題なく「残念」と表示されました。
YAmaGNZ

2023/07/26 22:25

(CheckBox2.Checked And CheckBox7.Checked And CheckBox4.Checked = True) この条件ですとCheckBox2、CheckBox7、CheckBox4の状態しかチェックしていませんので他のチェックボックスがどういう状態でも関係ありません。 なので他のチェックボックスにチェックが付いていない状態であることを判断する必要があります。 また (CheckBox2.Checked And CheckBox7.Checked And CheckBox4.Checked = True) という書き方ですが、これはCheckBox2.Checked、CheckBox7.Checked、CheckBox4.Checkedが全部Trueかというつもりで書かれているのではないかと思います。 これがCheckBox2.Checked、CheckBox7.Checked、CheckBox4.Checkedが全部Falseかという条件の時は (CheckBox2.Checked And CheckBox7.Checked And CheckBox4.Checked = False) こう書かれてしまうのではないかと思います。 この書き方は間違いで (CheckBox2.Checked = False And CheckBox7.Checked = False And CheckBox4.Checked = False) と1つづつ値がどうであるか書く必要があります。 式としては (CheckBox2.Checked = False) And (CheckBox7.Checked = False) And (CheckBox4.Checked = False) このように別々に判断されます。 (CheckBox2.Checked And CheckBox7.Checked And CheckBox4.Checked = True) こちらの場合は (CheckBox2.Checked) And (CheckBox7.Checked) And (CheckBox4.Checked = True) と判断され (CheckBox2.Checked)がtrueの為、たまたまうまくいっていた形になります。
koumekoume333

2023/07/27 00:43

ありがとうございます! なるほど。私の書いた条件だと、正解のチェックボックスがチェックされてさえいれば大丈夫、という風に処理されるのですね。Elseで、正解以外のチェックボックスの状態を考慮できていると思っていました。 頑張ってみますが、時間が足りないようなら選択できるチェックボックスを3 つだけに絞って問題を解いてもらうようlabelの文を変更しようと思います。 確かに、もし全部Falseの場合ならおっしゃっていた通りに書いていました。具体的に教えていただきありがとうございます!今回たまたまうまくいっていたということ、そしてその理由を丁寧に教えていただけたので、これからのプログラミングにうまく活かせそうです。
guest

回答1

0

エラーの原因は、Image型の変数をBooleanやString型として使おうとしていることにあります。
VB.NETでは、直接的に画像が表示された瞬間を検出するのは難しい(ほぼ出来ません)です。
違う言語を検討した方が早いかと思います。
それか画像を使うのを諦めるかですかね?

投稿2023/07/26 01:54

Ripple_py

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2023/07/26 02:17

>VB.NETでは、直接的に画像が表示された瞬間を検出するのは難しい(ほぼ出来ません)です とはどういうことでしょうか? コード上はタイマーで自分で画像を切り替えていたかと思います。 自分で表示しているものを制御しているのですからそれを取得することは出来るのではないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問