| ■No89116 (コジコジ さん) に返信 > ・ボタンは不要(チェック時にラベル1とラベル2に表示) > ・最初のチェック時、tagが100の時に「100=100」とはならず、「100」と表示 > ・合計が > 1000を超えない場合はラベル1に「1000を超えていません」 > 1000を超えたら、ラベル1に「1000を超えました」 > 2000を超えたら、ラベル1に「2000を超えました」と表示 > 計算式の並び順は「クリック順」です。
全部のチェックが解除された場合の条件が漏れているような…。
それと、『やりたいこと』は分かりましたが、 肝心の『質問』が書かれていないようです。
これはもはや「開発依頼」であろうかと思いますので、 後ほど、開発費用を請求させ(以下略
Public Class Form1 Private checked As New List(Of CheckBox)()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load CheckBox1.Tag = 100 CheckBox2.Tag = 200 CheckBox3.Tag = 300 CheckBox4.Tag = 400 CheckBox5.Tag = 500 For Each chk As CheckBox In Panel1.Controls.OfType(Of CheckBox)() AddHandler chk.CheckedChanged, _ Sub(c As CheckBox, arg As EventArgs) If c.Checked Then checked.Add(c) Else checked.Remove(c) End If Dim values = checked.Select(Function(o) o.Tag).ToArray()
Dim total As Integer = values.Cast(Of Integer)().Sum() If total > 2000 Then Label1.Text = "2000を超えました" ElseIf total > 1000 Then Label1.Text = "1000を超えました" Else Label1.Text = "1000を超えていません" End If
If values.Length = 0 Then Label2.Text = "" ElseIf values.Length = 1 Then Label2.Text = total.ToString("N0") Else Label2.Text = String.Join("+", values.Select(Function(v) String.Format("{0:N0}", v))) & "=" & total.ToString("N0") End If End Sub Next End Sub End Class |