VB2008EEのラジオボタンのチェック無し
4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが
入っていないのを含めて、batファイル4つとも実行されてしまいます。
チェックボックスだと、下記でチェックされていないもの値を変えられます。
If CheckBox1.CheckState = CheckState.Unchecked Then
aaa = "9"
End If
ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If (aaa = "1") Then
Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True)
End If
If (bbb = "2") Then
Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True)
End If
If (ccc = "3") Then
Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True)
End If
If (ddd = "4") Then
Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True)
End If
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
aaa = "1"
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
bbb = "2"
End Sub
Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
ccc = "3"
End Sub
Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged
ddd = "4"
End Sub
ふと思ったのですが、変数を利用しないでもできるのでは?
変数(aaa~ddd)を使う必要性がなければ、#1で発言した「ラジオボタン達_CheckedChanged」関数も不要となります。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'折角なので、Frameworkを利用すた形式での起動
Dim l_procSInf As New ProcessStartInfo("cmd")
l_procSInf.WindowStyle = ProcessWindowStyle.Normal 'Normalは規定値なので設定しなくてよし
If Me.RadioButton1.Checked Then
l_procSInf.Arguments = "/c xxx.bat"
ElseIf Me.RadioButton2.Checked Then
l_procSInf.Arguments = "/c yyy.bat"
ElseIf Me.RadioButton3.Checked Then
l_procSInf.Arguments = "/c zzz.bat"
ElseIf Me.RadioButton4.Checked Then
l_procSInf.Arguments = "/c www.bat"
End If
Dim l_prcProc As Process = Process.Start(l_procSInf)
l_prcProc.WaitForExit()
End Sub
前の質問で私の回答ちゃんと理解しましたか?思いっきり出来てないと見受けられます。
まず前回のプログラムと記述方法だいぶ違うようですが、今回載せてあるソースのいけない場所を列挙しましょうか。
・イベントが纏められておらず冗長
・分岐で一回一回IFを終了させているため、条件にあるラジオボタンを全部チェックした後の実行で全部通ること。
大きく二つです。
前回の質問でイベントを纏める処理が書かれていたのになぜやらないのでしょうか?
後、前回の質問のプログラムで動かないのはあなたの設計ミスです。
質問は大いに結構。けど返信した内容を全く理解しようとしないのは頂けません。
前回の質問で変数を減らすと他にも影響がでる(この時点で設計ミス)とのことなので前回の質問で記述したのに少し加えたものを載せておきます。
Private aaa As String
Private bbb As String
Private ccc As String
Private ddd As String
Private Sub RadioButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged, RadioButton2.CheckedChanged _
RadioButton3.CheckedChanged, RadioButton4.CheckedChanged
Select Case sender.text
Case "RadioButton1"
aaa = "1"
Case "RadioButton2"
aaa = "2"
Case "RadioButton3"
aaa = "3"
Case "RadioButton4"
aaa = "4"
End Select
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If (aaa = "1") Then
TextBox1.Text = aaa
Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True)
ElseIF (bbb = "2") Then
TextBox2.Text = bbb
Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True)
ElseIF (ccc = "3") Then
TextBox3.Text = ccc
Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True)
ElseIF (ddd = "4") Then
TextBox4.Text = ddd
Shell("cmd /c ppp.bat", AppWinStyle.NormalFocus, True)
End IF
End Sub
お礼
変数はここ以外でも使用するので、無くせません。 ありがとうございます。