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

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

新人プログラマーなので自信がありません

A 回答 (2件)

すいません




追加です。

他の方法を記載するのを忘れました。

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さんが書いたコードを大切にしましょう。
    • good
    • 0

こんにちは




>自分なりに作成してみました。
良く出来ていますね。(拍手



>このソースで不具合等ありませんでしょうか
このコード自体は問題ありませんが、このコードをどのように使うかによって、エラーになることもあります。
バグのないプログラムはありませんから。



例です。
各チェックボックスにチェックをいれると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さんが頑張って書かれたコードですので、このコードをそのまま使う方法を考えればいいと思います。

あとはどのようにバグが出ないように使うかだと思います。(それでも、バグのないプログラムはありません)

頑張ってください。
    • good
    • 0

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

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