投稿者 イヨ  (社会人) 投稿日時 2020/10/12 17:27:49
 魔界の仮面弁士様
返信ありがとうございます。
すいません画像みれなかったのですね


>それぞれのブロック内で a を宣言するのではなく、
>変数 aa のように、それよりも前で宣言すれば OK です。
できました!
Dim a As PictureBox = Nothing のように
先に宣言しておいてからifの中でセットする
とっても参考になりました ありがとうございます


>1, 2, 3 …といった番号で処理したいのであれば、TextBox や PictureBox を
>配列や List や Dictionary で管理することも検討した方が良いかもしれません。
せっかく教えてもらいましたが配列というものがどういう感じで使うのがベストなのかわからなかったのでいろいろコードいじって勉強します


>たとえば先のコードだと、変数 aa 内に TextBox1 がなく、
>代わりに TextBox3 が 2 回あるようですが、大丈夫ですか?
ミスです。。 
Dim barcode As String = $"{TextBox2.Text}{TextBox3.Text}{TextBox4.Text}{TextBox5.Text}{TextBox6.Text}"になります
aaはbarcodeとしました。


>それともう一つ。Try~Catch の範囲がいくら何でも広すぎるように思えます。
>これでは例外が発生した場合に、どこに問題があったのか把握しづらくなってしまいます。
Subブロックごとに Try~Catchはとりあえず付けとくという認識でした
仰る通り、たしかに大きく囲うと、どこにどんなエラーが出てるか見つけずらいです。。
闇雲に使わず局部的に使っていきたいと思います。


こんな感じで書き直したらうごきました
ありがとうございますmom

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim barcode As String = $"{TextBox2.Text}{TextBox3.Text}{TextBox4.Text}{TextBox5.Text}{TextBox6.Text}"
        Dim PictureBox As PictureBox = Nothing
        Dim maxheight As Integer = 40
        Dim barcode39 As Code39BarcodeDraw = BarcodeDrawFactory.Code39WithoutChecksum
        Dim img As Image = barcode39.Draw(barcode, maxheight)


        If barcode.Length = 15 Then 'バーコードに反映させる文字数確認15文字なら 
            If ComboBox1.SelectedItem = 1 Then 'コンボボックスで1が選ばれてたら 
                PictureBox = PictureBox1    'それぞれのブロック内で PictureBox をセット  
                If TextBox2.TextLength > 0 Then 'TextBox2に何か値が入っていたら 
                    PictureBox.Image = img 'PictureBoxにimgをセット 
                    LabelVal1.Text = barcode
                End If

            ElseIf ComboBox1.SelectedItem = 2 Then
                PictureBox = PictureBox2
                If TextBox2.TextLength > 0 Then
                    PictureBox.Image = img
                    LabelVal2.Text = barcode
                End If

            ElseIf ComboBox1.SelectedItem = 3 Then
                PictureBox = PictureBox3
                If TextBox2.TextLength > 0 Then
                    PictureBox.Image = img
                    LabelVal3.Text = barcode
                End If

            ElseIf ComboBox1.SelectedItem = 4 Then
                PictureBox = PictureBox4
                If TextBox2.TextLength > 0 Then
                    PictureBox.Image = img
                    LabelVal4.Text = barcode
                End If
            End If
        Else
            MsgBox("全15文字で入力してください")
        End If

        If PictureBox IsNot Nothing Then
            MsgBox("ないです><")
            PictureBox.Image = img   ' a が Nothing では無かった場合は画像を差し替え  
        End If
    End Sub