- ベストアンサー
VB2008EEのチェックボックスにて、9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、なぜ4までと5からで動作が変わるのでしょうか?
- VB2008EEのチェックボックスを使用して、9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、4つまでは正常に機能するが、5つ以上のチェックボックスでは正常に動作しない。
- チェックボックスにチェックが入っているかどうかを判断して、対応するテキストボックスに文字を表示するようにプログラムが設定されている。しかし、4つまでは正常に機能するが、5つ以上のチェックボックスでは正常に動作しない。
- プログラムの中で各チェックボックスの状態を確認し、対応するテキストボックスに文字を表示するかどうかを判断しているが、5つ以上のチェックボックスではこの処理が正常に行われない可能性がある。なぜ4までと5からで動作が変わるのかについては、詳細なコードや環境の情報が不足しているため、特定の原因を特定することは困難である。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。 (実際は各番号) ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged ↑重要なのは Handles CheckBox4.CheckedChanged という部分です。 Handles CheckBox5.CheckedChanged に変更すると、CheckBox5の変更時にCheckBox4_CheckedChangedが実行されます。 CheckBox5以降のハンドリングさせている関数の、「Handles」以降がどのようになっているかが気になります。 (質問内容では省略されているため) ※余談 似たようなコントロールが多数ある場合、一つの関数に複数のコントロールのイベントを流し込むと、コードが簡略化できます。 http://dobon.net/vb/dotnet/control/buttonarray.html
その他の回答 (1)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
省略されているところを復元してやってみたのですが、そちらが言う状況が再現しません。 省略部分のコードに原因があるようなきがしてならないのですが。。。 試しに以下のコードを実行したらどうなるか教えてもらえませんか? 現在のそちらで利用されている2メソッド Private Sub Button1_Click( Private Sub CheckBox1~9_CheckedChanged( をコメントアウト ↓ここ以降を追加 Dim layps(8) As String Private Sub CheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged, CheckBox5.CheckedChanged, CheckBox6.CheckedChanged, CheckBox7.CheckedChanged, CheckBox8.CheckedChanged, CheckBox9.CheckedChanged Dim l_chk As CheckBox = DirectCast(sender, CheckBox) Dim l_int As Integer = Integer.Parse(l_chk.Name.Substring(l_chk.Name.Length - 1)) layps(l_int - 1) = l_int End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 1 To layps.Length Dim l_chk As CheckBox = Me.Controls("CheckBox" + i.ToString()) If Not l_chk.Checked Then layps(i - 1) = "" End If Next For i As Integer = 1 To layps.Length Dim l_txt As TextBox = Me.Controls("TextBox" + i.ToString()) If layps(i - 1) = i.ToString() Then l_txt.Text = New String(Chr(Asc("a") + i - 1), 5) End If Next End Sub
お礼
チェックボックスの配置が2列で半時計周りになっているのに、 値を入れいている順番が↓↓になっていました。 これで右側の5~9の列が正しく動作していなかったようです。 お騒がせしました、すみません。 初めにアドバイス頂いた余談の方法も勉強して試してみます。 ありがとうございました。
補足
文字制限の為に、同じ記述の繰り返しなので省略しました。 Handles CheckBox5.CheckedChanged 5の所は5になっています。 > 5~9にチェックが入っていても下記が実行されてしまいます。 If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "5" End If チェックボックス5にチェックを入れて上記の記述をすると、テキストが表示されます。 1~4はチェックが無いときに実行されます。