プロが教える店舗&オフィスのセキュリティ対策術

VB.NET
例)
Private Sub ViewerKanseikouji_Load _
(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load

If GblInsatuKbn = "10" Then ' 印刷区分 10:未成工事、20:完成工事
Dim rpt As New RSMikanseiKouji()
ElseIf GblInsatuKbn = "20" Then
Dim rpt As New RSKAnseiKouji()
Else
Dim rpt As New RSXXX()
End If
rpt の処理
のように条件(IF文)により Dimの設定を変えるようなことは可能でしょうか?
上記コーデングですと「rptは、宣言されてません。アクセスできない保護レベルになってます(BC30451)」となりコンパイルが通りません。

IF文でなくても構いませんが、
Dim rpt1 As New RSMikanseiKouji()
Dim rpt2 As New RSKAnseiKouji()
If GblInsatuKbn = "10" Then
rpt1 の処理
ELSEIF GblInsatuKbn = "20" Then
rpt2 の処理
ENDIF
のように複数の変数を定義したくないので、いい方法が御座いましたらご教授願います。

質問者からの補足コメント

  • 回答ありがとうございます。
    メンテナンスの関係上、ステップ数を増やしたくなかったので、select Case文やIF文を使いたくなかったので、kmeeさんの方法で行います。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/03/14 14:13

A 回答 (2件)

RSMikanseiKouji と RSKAnseiKouji と RSXXX が RSBase クラスの子孫で


「rpt の処理」 が RSBase のメソッドとプロパティでやれることなら

Dim rpt as RSBase
としといて
If GblInsatuKbn = "10" Then ' 印刷区分 10:未成工事、20:完成工事
rpt = New RSMikanseiKouji()
ElseIf GblInsatuKbn = "20" Then
rpt = New RSKAnseiKouji()
Else
rpt = New RSXXX()
End If

とかできますが
    • good
    • 0

その中で宣言しているから変数はその中でしか使えないのはご存知と言う事であれば、Select Case ~ End Select を

使用されてみるとか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A