• 締切済み

どれか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

みんなの回答

回答No.3

こんにちは。 うまくいきませんでしたか?私の環境では正しく実行されますね。 エラーが表示されていたら、内容を教えて頂けないでしょうか?

yurielna
質問者

補足

エラーも出ずチェックしてもラジオボタンが無効になりません。 調べていますが、難しいですね。

回答No.2

こんにちは。 イベントを使用すれば実現できます。↓ Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, _ CheckBox5.CheckedChanged, CheckBox6.CheckedChanged, CheckBox2.CheckedChanged '変数宣言 Dim FrmCheckBox As CheckBox = Nothing Dim FrmRadioButton As RadioButton = Nothing Dim EnbFlg As Boolean = True Try 'チェックボックス検査ループ For Each FrmCntrl As Control In Me.Controls 'コントロールの種別がチェックボックスか検査 If TypeOf FrmCntrl Is CheckBox Then 'フォーム上のチェックボックスを取得 FrmCheckBox = DirectCast(FrmCntrl, CheckBox) If FrmCheckBox.Checked = True Then 'ラジオボタン表示フラグ更新 EnbFlg = False 'ループ脱出 Exit For End If End If Next 'ラジオボタン表示/非表示処理 For Each FrmCntrl2 As Control In Me.Controls 'コントロールの種別がラジオボタンか検査 If TypeOf FrmCntrl2 Is RadioButton Then 'フォーム上のラジオボタンを取得 FrmRadioButton = DirectCast(FrmCntrl2, RadioButton) 'ラジオボタン表示フラグ設定 FrmRadioButton.Enabled = EnbFlg End If Next Catch ex As Exception MsgBox(ex.Message & ex.StackTrace, MsgBoxStyle.Critical) End Try End Sub

yurielna
質問者

補足

ありがとうございます。 これで動作しなかったので、ちょっと調べてみます。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

すべてのチェックボックスの更新イベント。 まあ、コントロールを配列にしたほうが楽な気もするけどね。

関連するQ&A