如何一次更改每个按钮的颜色?

时间:2018-07-06 21:42:43

标签: vb.net

我有一个程序,我想用它来选择他们喜欢的颜色。我知道通常如何更改颜色,但我想一次全部完成。反正有这样做吗?像是combobox.selecteditem =“ Red”的话 everybutton.color = color.red。谢谢您的帮助!我正在使用vb.net

3 个答案:

答案 0 :(得分:-1)

假设他们在表格上没问题

Dim buttons = Me.Controls.OfType(Of Button).ToArray()
For each button as Button in buttons
    button.ForeColor = Color.red
Next

如果涉及组框或面板或类似内容,则需要您递归遍历控件,检查是否为按钮,然后进行设置...然后为其子控件调用函数

Dim _list As New List(Of Control)
 Public Sub GetChilds(container As Control)
    For Each child As Control In container.Controls
        _list.Add(child)
        If (child.HasChildren) Then
            GetChilds(child)
        End If
    Next
End Sub

然后填充您称为GetChilds(Me)的列表

并使用它

  For Each cntrl As Control In _list
  Dim objAsConvertible As Button = TryCast(cntrl, Button)

   If Not objAsConvertible Is Nothing Then

    objAsConvertible.ForeColor = Color.Red
   End If
Next

答案 1 :(得分:-1)

使用循环对您来说是一个问题,例如:

For Each ctrl As Control In pnl.Controls
    If TypeOf ctrl Is Button Then
        ctrl .Color = Color.Red
    End If
Next

pnl是面板的名称,还是其他某种形式的控制控件?

答案 2 :(得分:-1)

如果这是Windows窗体项目(您应始终指定项目类型),则一个想法是将所有按钮数据绑定到单个按钮。为此,我们需要一个按钮(也许是Button1)通过

来控制另一个按钮的前景色
.DataBindings.Add("ForeColor", Button1, "ForeColor")

保持简单,以下代码将绑定到表单上的所有Button控件以及子容器中的Button控件,例如面板,按钮等

此代码将放置在“表单加载”或“表单显示”事件中。

Dim ctrl As Control = Me.GetNextControl(Me, True)
Do Until ctrl Is Nothing
    If TypeOf ctrl Is Button AndAlso ctrl.Name <> "Button1" Then
        CType(ctrl, Button).DataBindings.Add("ForeColor", Button1, "ForeColor")
    End If
    ctrl = Me.GetNextControl(ctrl, True)
Loop

然后,在Button1 click事件中(保持其简单性)与ColorDialog相切

If ColorDialog1.ShowDialog() = DialogResult.OK Then
    Button1.ForeColor = ColorDialog1.Color
End If

如果需要清除上面设置的绑定,这意味着所有绑定都将清除,因此请考虑后果。

Controls.OfType(Of Button).ToList().
    ForEach(Sub(b)
                b.DataBindings.Clear()
            End Sub)

最后,回到第二个代码块,可以将其放置在代码模块中,甚至可以将其设置为语言扩展方法。

Public Function GetAll(pControl As Control, pType As Type) As IEnumerable(Of Control)
    Dim ctrls As IEnumerable(Of Control) = pControl.Controls.Cast(Of Control)()

    Return ctrls.
        SelectMany(Function(ctrl) GetAll(ctrl, pType)).
        Concat(ctrls).
        Where(Function(c) c.GetType() Is pType)

End Function

用法

GetAll(Me, GetType(Button)).
    Where(Function(b) b.Name <> "Button1").
    ToList().ForEach(Sub(button) button.DataBindings.
                        Add("ForeColor", Button1, "ForeColor"))