- 締切済み
2つのチェックボックスを制御
2つのチェックボックスがあり両方ともはずせて片方だけにチェックがつく2つの チェックボックスが作りたいです 自分なりに作成してみました。このソースで不具合等ありませんでしょうか Private Sub ckb1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb1.CheckedChanged If ckb1.Checked = True Then ckb2.Checked = False End If End Sub Private Sub ckb2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb2.CheckedChanged If ckb2.Checked = True Then ckb1.Checked = False End If End Sub 新人プログラマーなので自信がありません
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
すいません 追加です。 他の方法を記載するのを忘れました。 Public Class Form1 Private Sub CheckBox1_Click(sender As System.Object, e As System.EventArgs) Handles CheckBox1.Click Dim f2 As New Form2 If CheckBox1.Checked = True Then CheckBox2.Checked = False f2.Show() End If End Sub Private Sub CheckBox2_Click(sender As System.Object, e As System.EventArgs) Handles CheckBox2.Click Dim f2 As New Form2 If CheckBox2.Checked = True Then CheckBox1.Checked = False f2.Show() End If End Sub End Class 上記の方法では、チェックボックスに何回チェックを入れても、チェックした方のイベントハンドラしか発生しませんので、Form2は、チェック1回につき1個だけ表示されます。 但しこのコードが正しいとは言えません。 tkwavekさんが書いたコードを大切にしましょう。
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんにちは >自分なりに作成してみました。 良く出来ていますね。(拍手 >このソースで不具合等ありませんでしょうか このコード自体は問題ありませんが、このコードをどのように使うかによって、エラーになることもあります。 バグのないプログラムはありませんから。 例です。 各チェックボックスにチェックをいれるとForm2が表示されるサンプルです。 2回目にチェックボックスにチェックをいれるとCheckedChangedが働いて、どちらのチェックボックスにチェックしても、ckb1_CheckedChangedとckb2_CheckedChangedの両者のイベントが発生します。 下記のサンプルでは、1度目にチェックボックスにチェックをいれて、2回目にチェックボックスに再度他のチェックボックスにチェックをいれるとckb1_CheckedChangedとckb2_CheckedChangedの両者のイベントが発生してForm2が2個表示されます。 Public Class Form1 Private Sub ckb1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb1.CheckedChanged Dim f2 As New Form2 f2.Show() If ckb1.Checked = True Then ckb2.Checked = False End If End Sub Private Sub ckb2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb2.CheckedChanged Dim f2 As New Form2 f2.Show() If ckb2.Checked = True Then ckb1.Checked = False End If End Sub End Class 2個表示しないためには、下記のようにします。 Public Class Form1 Dim f2 As New Form2 Private Sub ckb1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb1.CheckedChanged f2.Show() If ckb1.Checked = True Then ckb2.Checked = False End If End Sub Private Sub ckb2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ckb2.CheckedChanged f2.Show() If ckb2.Checked = True Then ckb1.Checked = False End If End Sub End Class 上記のサンプルでは、両方ともClass Form2のFormClosingイベントをキャンセルしています。 下記参照 Public Class Form2 Private Sub Form2_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing e.Cancel = True Me.Hide() End Sub End Class >2つのチェックボックスがあり両方ともはずせて片方だけにチェックがつく2つのチェックボックスが作りたいです いろいろな方法がありますが、tkwavekさんが頑張って書かれたコードですので、このコードをそのまま使う方法を考えればいいと思います。 あとはどのようにバグが出ないように使うかだと思います。(それでも、バグのないプログラムはありません) 頑張ってください。