设置按钮启用状态

时间:2012-10-11 13:05:48

标签: vb.net button

我有一个简单的vb 2010表单,我希望能够设置所有按钮的启用声明。 我已经根据需要为复选框和numericUpDown控件创建了类似的函数,但对于按钮,函数似乎无法正常运行。

Private Sub setButtonsState(ByVal state As Boolean)
    Dim cControl As Control
    For Each cControl In Me.Controls
        If (TypeOf cControl Is Button) Then
            cControl.Enabled = state
        End If
    Next cControl
End Sub

这样称呼:setButtonsState(True) 这似乎对按钮没有任何影响,但buttonName.Enabled = True工作正常...... 我几乎就是你在VB上称之为菜鸟的人,所以任何人都可以帮助我吗? TA

3 个答案:

答案 0 :(得分:4)

除非你的所有按钮都直接属于表格,否则它们不会被访问,因为它不会通过控制树向下游来到达它们。稍微不同的方法可能是一种更加递归的方法:

Private Sub setButtonsState(ByVal controls as System.Windows.Forms.Control.ControlCollection, ByVal state as Boolean)

    For Each ctrl as Control in controls
        If (ctrl.HasChildren) Then setButtonsState(ctrl.Controls, state)

        If (TypeOf ctrl Is Button) Then ctrl.Enabled = state
    Next

End Sub

答案 1 :(得分:1)

它适用于我的表格。您确定要将状态设置为真值吗?你们很多人想在子程序中调暗一个名为“state”的变量来测试它。将状态设置为true并禁用所有按钮。

尝试检索返回的控件数。确保您正确引用控件。

将测试布尔值设为True以进行测试:

*Dim state As Boolean = True*

    Dim cControl As Control
    For Each cControl In Me.Controls
        If (TypeOf cControl Is Button) Then
            cControl.Enabled = state
        End If
    Next cControl

检查控件数量:

 For Each cControl In (Your Form Name Ex. FrmMain1).Controls
                    If (TypeOf cControl Is Button) Then
                        cControl.Enabled = state
                        *debug.writeline(cControl.Name)*
                    End If
                Next cControl

答案 2 :(得分:0)

如果可能的话,我建议你避免递归。下面的方法具有更好的调试能力。

首先,Linearise ControlCollection tree进入Control数组 - 泛型扩展方法,无递归,LINQ或GetNextControl。

然后你可以这样写:

Private Sub setButtonsState(ByVal controls As ControlCollection, ByVal state As Boolean)
  For Each ctrl As Control In controls.GetAllControlsOfType(Of Button)()
    ctrl.Enabled = state
  Next
End Sub