アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

rk_lesさん



お気持ちよくわかります。
私もさっきの質問以前に、纏めることを推奨したのですが、、、
http://okwave.jp/qa/q5892351.html


質問者さん
rk_lesさんが言うことを、面倒だと思っても、無理にでも実現した方がいいですよ。


既に設計段階の問題を指摘されておられますが、よいプログラムというのは、変更改造に強い作りをしているという特徴があります。
「設計ミス」自体は仕方がありません。誰でもあります。

しかしその発生を未然に防ぐ効果も兼ねるのですよ。


「口うるさい人たちみたい」に思われるかもしれませんが、、、

纏める事を諦めずに、早い段階で作りを見直す作業に入るべきだと、私も思います。
    • good
    • 0

前の質問で私の回答ちゃんと理解しましたか?思いっきり出来てないと見受けられます。


まず前回のプログラムと記述方法だいぶ違うようですが、今回載せてあるソースのいけない場所を列挙しましょうか。

・イベントが纏められておらず冗長
・分岐で一回一回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

この回答への補足

・イベントが纏められておらず冗長

質問に関係ありません。

・分岐で一回一回IFを終了させているため、条件にあるラジオボタンを全部チェックした後の実行で全部通ること。

それの上での質問です。

批判されて不快ですので、今後はスルーしてください。

補足日時:2010/05/18 19:53
    • good
    • 0
この回答へのお礼

前の質問のNo.7でcase使った記述は出来ないと書いています。
 

お礼日時:2010/05/18 20:46

ふと思ったのですが、変数を利用しないでもできるのでは?



変数(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
    • good
    • 0
この回答へのお礼

変数はここ以外でも使用するので、無くせません。
ありがとうございます。
 

お礼日時:2010/05/18 19:44

一つのイベントに一つの関数をハンドリングさせずに、纏めてしまいましょう。




Private Sub RadioButton1_CheckedChanged(
Private Sub RadioButton2_CheckedChanged(
Private Sub RadioButton3_CheckedChanged(
Private Sub RadioButton4_CheckedChanged(
の各イベント関数は全て不要です。コメントアウトしてください。




↓これを追加
Private Sub ラジオボタン達_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged, RadioButton2.CheckedChanged, RadioButton3.CheckedChanged, RadioButton4.CheckedChanged
  aaa = IIf(Me.RadioButton1.Checked, "1", "")
  bbb = IIf(Me.RadioButton2.Checked, "2", "")
  ccc = IIf(Me.RadioButton3.Checked, "3", "")
  ddd = IIf(Me.RadioButton4.Checked, "4", "")
End Sub
    • good
    • 0

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