遍历所有 NumericUpDown 以检查值

Looping through all NumericUpDown to check the value

如何循环遍历所有 NumericUpDown 并检查值?

For Each control As Control In Me.Controls
    Dim numControls As NumericUpDown = TryCast(control, NumericUpDown)
    If numControls.Value > 14 Then
        MsgBox("ok")
    End If
Next

我试过但没用的那个

你所做的有些道理,但它有一个明显的缺陷。 TryCast 的全部要点是,如果转换失败而不是抛出异常,它会 returns Nothing 。然后您继续使用该结果,就好像它不是 Nothing 并且无论如何都会导致 NullReferencxeException 。如果您使用 TryCast,那么您总是需要测试 Nothing 的结果。如果你不需要这样做,因为你知道结果不会是 Nothing 那么你不应该首先使用 TryCast

Dim numControls = TryCast(control, NumericUpDown)

If numControls IsNot Nothing AndAlso numControls.Value > 14 Then

也就是说,您可以一次性进行投射和过滤,因此没有必要这样做:

For Each numControls In Me.Controls.OfType(Of NumericUpDown)
    If numControls.Value > 14 Then

示例代码还假定控件已直接添加到窗体中。如果它们已被添加到其他容器中,例如a Panel,那么您需要使用该容器的 Controls 集合而不是表单。

如果您的任何 NumericUpDown 中的数值小于 15 是不可接受的,则将它们的最小值 属性 设置为 15,从而完全避免此检查

如果出于某种原因您仍然需要这样做,我会推荐类似

的东西
If Me.Controls.OfType(Of NumericUpDown).Any(Function(nud) nud.Value < 15)) Then ...

这样,如果其中任何一个小于 15,你就做一次。

尽可能避免使用消息框;它们对通过 UI 的用户流非常具有破坏性。当然,在一个表单上有 10 个 NUD,如果它们都超过 14 个,并且连续显示 10 个“ok”消息框,这对用户来说会非常烦人