.net - 循环遍历所有 NumericUpDown 以检查 value

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

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

我试过但没用的那个

回答1

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

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

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

这样,如果其中任何一个小于 15,您就执行一次。

如果可以,尽量避免使用 MessageBox;它们对通过 UI 的用户流非常具有破坏性。当然,在一个表单上有 10 个 NUD,如果它们都超过 14 个,则连续显示 10 个“ok”消息框会让用户非常恼火

回答2

你所做的有些道理,但它有一个明显的缺陷。 TryCast 的全部意义在于,如果强制转换失败,它会返回 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

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

相似文章

最新文章