| 2018/10/31(Wed) 17:20:29 編集(投稿者)
■No89112 (コジコジ さん) に返信 > 当方の勘違いでございました。
ちなみに、選択されていないタブも含めるなら SelectMany で平坦化できます。
Dim total As Integer = TabControl1.TabPages.Cast(Of TabPage)().SelectMany(Function(t) t.Controls.OfType(Of CheckBox)()).Sum(Function(c) CInt(c.Tag))
> 一点、希望ですが、チェックするごとに計算式が見えるようにする方法はございますでしょうか。 > 3個チェックしたら、「100+200+300=600」と違うラベルに出ると望ましいです。
仕様がまだまだ曖昧です。
まず、何も選択されていない場合、= の左辺はどのように表記されるのでしょうか。 それとも、何も選択されていない場合は空欄にするのでしょうか。
また、計算式の各項の並び順をどうするのかも不明瞭です。 たとえば、数値の昇順、クリック順、コントロールの位置や名前順などなど。
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load CheckBox1.Tag = 100 CheckBox2.Tag = 200 CheckBox3.Tag = 300 CheckBox4.Tag = 400 CheckBox5.Tag = 500 For Each c As CheckBox In Panel1.Controls.OfType(Of CheckBox)() AddHandler c.CheckedChanged, Sub() UpdateFormula() Next End Sub
Private Sub UpdateFormula() Dim values = Panel1.Controls.OfType(Of CheckBox)().Where(Function(c) c.Checked).Select(Function(c) c.Tag) If values.Any() Then Label2.Text = String.Join("+", values.OrderBy(Function(i) i)) & "=" & values.Cast(Of Integer)().Sum().ToString("N0") Else Label2.Text = "0" End If End Sub |