if文からcase文への置き換え

このQ&Aのポイント
  • ピクチャボックスをクリックしたら、チェックボックスがチェックされるメソッドを作りたいと思っています。
  • 上記のif文をCase文に置き換えたのですが、エラーが出てしまいます。
  • Case文の使い方が間違っているようです。どこが間違っているのか教えてください。
回答を見る
  • ベストアンサー

if文からcase文への置き換え

ピクチャボックスをクリックしたら、チェック ボックスがチェックされるメソッドを作りたいと 思っています。 Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click 'ここから If sender Is PictureBox1 Then If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If ElseIf sender Is PictureBox2 Then If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End If 'ここまで End Sub 上記のif文をCase文に置き換えたくて、 'ここから Select Case sender Case PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select 'ここまで 上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。 Case文の使い方が間違っているんだとは思いますが、どこがどう 間違っているのがよくわかりません。 ご教授いただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

SENDER は iS xxx としかかけません。 ですから 答えは ====================================================== Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click Select Case True Case sender Is Me.PictureBox1 If Me.CheckBox1.Checked = False Then Me.CheckBox1.Checked = True Else Me.CheckBox1.Checked = False End If Case sender Is Me.PictureBox2 If Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True Else Me.CheckBox2.Checked = False End If End Select End Sub ====================================================== です。 もっとコーディング数を減らすには ========================================================= Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click Select Case True Case sender Is Me.PictureBox1 Me.CheckBox1.Checked = Not Me.CheckBox1.Checked Case sender Is Me.PictureBox2 Me.CheckBox2.Checked = Not Me.CheckBox2.Checked End Select End Sub ================================================================ でも同じ動作をします。 なお、VB.NET 2005 で動作テスト済みです。

ginfizz_so
質問者

お礼

ありがとうございます。 なるほど、isがなければいけなかったのですね。 不勉強でした。 大変参考になるご意見、感謝です。

関連するQ&A

  • 条件判断について教えて下さい。

    VB2008を使用している初心者です。 現在、RichTextBoxとCheckBoxとそれに対応したTextBoxを準備し、CheckBoxがTrueのTextBox.TextをRichTextBoxに代入するプログラムを作成しています。RichTextBoxにはCheckBoxをTrueにした分だけ複数のTextBox.Textを代入させています。ここまでのプログラムは下記コードで問題なく作動しています。 Button1を押す。 RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ If Me.CheckBox20.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox20.Text End If ここで問題なのですが、RichTextBox1への代入完了後、FalseにしたCheckBoxを再度True(代入時に選択したもののみ)にするコードをButton2に作成したいのですが上手くいきません。例えば下記のコードですと、RichTextBoxに1つだけTextBoxが入っている場合しかCheckBoxのTrueが戻りません。 If Me.CheckBox1.Checked = False Then If RichTextBox1.Text = TextBox1.Text Then Me.CheckBox1.Checked = True End If End If ・ ・ ・ If Me.CheckBox20.Checked = False Then If RichTextBox1.Text = TextBox20.Text Then Me.CheckBox2.Checked = True End If End If これはIf RichTextBox1.Text = TextBox1.Text Thenにしてしまっているためだと思いますが、これをどう修正したら良いかわかりません。もしお時間がある方みえましたらご教授お願いいたします。

  • CheckBoxがTrueの場合に表示をさせるには?

    VB2008を使用しています。 3つのCheckBox1~3とそれに対応した3つのTextBox1~3を準備し、 Buttonを押すとCheckBoxがTrueのものだけをRichTextBox1に表示 させたくて下記のプログラムを作成しました。 しかしCheckBox1とCheckBox3については上手く作動するのですが CheckBox2について不具合が発生します。 (不具合) CheckBox1=TrueでButtonを押すとRichTextBox1にTextBox1を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox1. TextBox3と表示。 ここまでは良いのですが、 CheckBox2=TrueでButtonを押すとRichTextBox1にTextBox2を表示。 その後、CheckBox3=TrueでButtonを押すとRichTextBox1にTextBox2. TextBox2.TextBox3と表示されてしまいTextBox2の内容が重複して しまいまいます。 何か良い解決策がありましたら教えて下さい。 よろしくお願いいたします。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click     If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If     If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "."     End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text     End If If Me.CheckBox3.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "." End If RichTextBox1.Text = RichTextBox1.Text & TextBox3.Text End If End Sub

  • VisualBasicの作業でわからないことが・・・教えてください!

    大学生です。プログラミングの授業でVisualBasicを利用しているのですが、わからずに先に進めない状態なので、どなたか教えてください! ListBox(強中弱) × 1 CheckBox × 12 TextBox(点数表示) × 1 があります。やりたいことは、『CheckBoxにチェックを入れたとき、ListBoxで選んだレベルに応じた点数をTextBoxに表示させたい』です。 例えば、ListBoxで強を、かつCheckBox(のとある項目)にチェックを入れたら、TextBoxに『5点』と表示させるようなプログラムです。強が何点で中が何点かと言うのは定義してありますので問題ないです。しかも、チェックをはずすと、それと同じ点数をマイナスにするようにもしたいんです。 どうすればよいのでしょうか?ちなみに現段階まで作ってあるのは以下の通りです。 Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged Dim point As Integer If CheckBox1.Checked = True Then Select Case ListBox1.SelectedIndex Case 0 point = 10 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If TextBox1.Text = goukei pre_goukei = goukei Case 1 point = 6 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If TextBox1.Text = goukei goukei = pre_goukei Case 2 point = 3 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If Case 3 point = 0 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If End Select Else Select Case ListBox1.SelectedIndex Case 0 point = 10 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If Case 1 point = 6 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If Case 2 point = 3 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If Case 3 point = 0 If CheckBox1.Checked Then goukei = goukei + point Else goukei = goukei - point End If End Select End If TextBox1.Text = goukei End Sub 加算はできるのですが、減算をしてくれない状態です。ちなみに、case3から下はまだ手付けずです。他にもっと効率の良いやり方があるのかもしれませんが、IFとCASEを利用して作ると言うカテゴリにいるので、その点も踏まえて、これでわかる方がいましたら、よろしくお願いします。

  • RichTextBoxに代入されたTextBoxの数を表示

    VB2008を使用しています。現在、10個のTextBoxとそれに対応するCheckBoxを作成し、チェックの入ったTextBox内の文字をRichTextBoxに代入するプログラムを作成しています。そこでRichTextBoxに代入されたTextBoxの数を別のTextBoxに表示させたいのですが何か良い方法はありますでしょうか?現在、下記のようにコードを組んであります。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text ・ ・ ・ If Me.CheckBox10.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox10.Text End If

  • Visual Basicがわかりません。

    Public Class Form1 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics Dim PenColor As New System.Drawing.Pen _ (System.Drawing.Color.Black) GraphicsFun.DrawRectangle(PenColor, 30, 30, 450, 300) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top + 31 Then PictureBox1.Left = PictureBox1.Left + 1 Else If PictureBox1.Top < 330 - PictureBox1.Height Then PictureBox1.Top = PictureBox1.Top + 1 Else If PictureBox1.Left > 30 Then PictureBox1.Left = PictureBox1.Left - 1 Else If PictureBox1.Top > 30 And PictureBox1.Left + 31 Then PictureBox1.Top = PictureBox1.Top - 1 End If End If End If End If End Sub End Class ピクチャーボックスを四角形の中で右周りに枠の中をボタンを押すと回るようにしたいんですけど、2回目の動作と3回目の動作がかぶってしまい、うまくいきません。4回目の解決策を教えてください。また、ボタン2を押すと反対周りにピクチャーボックスが回る、コマンドを 教えてください。

  • 2つのチェックボックスを制御

    2つのチェックボックスがあり両方ともはずせて片方だけにチェックがつく2つの チェックボックスが作りたいです 自分なりに作成してみました。このソースで不具合等ありませんでしょうか Private Sub ckb1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb1.CheckedChanged If ckb1.Checked = True Then ckb2.Checked = False End If End Sub Private Sub ckb2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb2.CheckedChanged If ckb2.Checked = True Then ckb1.Checked = False End If End Sub 新人プログラマーなので自信がありません

  • Visual Basic 合計がうまく出せません。

    Visual Basicを習い始めたばかりですので、コードが分かり難くてすみません。チェックボックスとラジオボタンを使って合計等を出したいのですが、下のコードだとTax、Subtotal、Totalが0になってしまいます。各々のチェックボックスとラジオボタンに下のコードを入れてから、合計等が0になってしまいました。その前は、きちんと計算は出来ていたのですが。ご教授宜しくお願いいたします。 ---------------------- Private Sub Checkbox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Checkbox1.CheckedChanged Dim checkbox1 As Double = 450.40 Dim checkbox2 As Double = 871.65 Dim checkbox3 As Double = 1860.56 Dim radiobutton1 As Integer = 0 Dim radiobutton2 As Double = 250.45 Dim radiobutton3 As Double = 674.24 Dim sum As Double If checkbox1.Checked = True Then sum += checkbox1 End If If checkbox2.Checked = True Then sum += checkbox2 End If If checkbox3.Checked = True Then sum += checkbox3 End If If radiobutton1.Checked = True Then sum += radiobutton1 End If If radiobutton2.Checked = True Then sum += radiobutton2 End If If radiobutton3.Checked = True Then sum += radiobutton3 End If txtSum.Text = FormatCurrency(sum) End Sub ---------------------------- Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click Dim Car As Double Dim Tax As Double Dim Sum As Double txtTax.Text = Format((Car + Sum) * (0.12), "$######.##") ‘Taxの計算 txtSubtotal.Text = Format(Car + Sum + Tax, "$######.##") ‘Subtotalの計算 Dim Subtotal As Double Dim Trade As Double txtTotal.Text = Format(Subtotal + Tax, "$######.##")  ‘合計の計算 End Sub -----------------------

  • Select Case文についてご教授お願いします。

    助けて下さい。Select Case文についてご教授お願いします。現在VB2008にてプログラムを作成しているのですが、どうにも煮詰まってしまいました。 作成内容は、Excelの任意のSheetから文字をVB上のTextBox1~50に呼び出し、その内いくつかをCheckBoxとButtonを使用してRichTextBox1に表示させると共に、TextBox51に入力した文字をExcelから呼び出した任意の文字に対応したセルへ保存というものです。Excelからの呼び出しにIf文を使用しているため、同一プロシージャ内で別のIf文を使用してしまうと、先のIf文で決めた変数が反映されないためSelect Case文を使用して保存をさせようとしているのですが上手くいきません。以下に現在のコードを記載しますのでよろしくお願いいたします。 Private Sub Button1_Click~ Excel取得コード If RadioButton1.Checked = True AndAlso RadioButton13.Checked = True Then 'Sheetと列を選択 tuki = CType(Book.Worksheets.Item(2), Microsoft.Office.Interop.Excel.Worksheet) 'Sheet情報 COLUMN1 = "B" '列1情報 COLUMN2 = "F" '列2情報 ・ ・ ・ End If 'ここから先は指定したTextBoxをRichTextBoxに表示(先のIf文内の変数は未使用) RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True ThenIf RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ End If 'ここから保存指示=エラー箇所 Select Case tuki.Range(COLUMN1 & "3").Value Case RichTextBox1.text = tuki.Range(COLUMN1 & "3").Value tuki.Range(COLUMN2 & "3").Value = TextBox51.Text Book.Save() という感じで作成しているのですが「String "" から型 'Boolean' への変換は無効です」と表示されます。 他のケースではIf文の変数をSelect Caseに対応できたので、この方法を選択しました。 基本的にSelect Caseの使い方が誤っていると思うのですが解決策が見つかりませんでした。 他の方法も含めて、良い案がありましたらご教授お願いいたします。 長文申し訳ありません。

  • どれか1つでもチェックされていたら無効にする

    VB2010 7 Pro SP1 8つのチェックボックスと4つのラジオボタンがあり、チェックボックスにどれか1つでも チェックが入っていたらラジオボタンを無効にし、チェックが全部外れたら ラジオボタンを有効にしたいです。 下記のようなifで出来るかと思ったのですが、フォーム、ラジオボタン、チェックボックス どれに記述しても動きません。 どこに記述すればいいでしょうか? If CheckBox1.Checked Or CheckBox2.Checked Or CheckBox3.Checked Or CheckBox4.Checked Or CheckBox5.Checked Or CheckBox6.Checked Or CheckBox7.Checked Or CheckBox8.Checked Then RadioButton4.Enabled = False RadioButton6.Enabled = False RadioButton7.Enabled = False RadioButton8.Enabled = False Else RadioButton4.Enabled = True RadioButton6.Enabled = True RadioButton7.Enabled = True RadioButton8.Enabled = True End If

  • case文

    こんにちは、SQL初心者です。 値を判定して、trueなら「*」をfalseなら表示なしとするのですが、 判定項目がかなりありまあす。 case文だとtrue、falseで二通り書かないといけないと思うのですが、簡単な方法はありますか? if文みたいにelseを使えればいいのですが。

専門家に質問してみよう