如何更改表单中所有按钮的属性?

时间:2014-11-04 20:33:15

标签: .net vb.net winforms button properties

是否可以更改表单/项目上所有按钮的属性?例如。我想将所有按钮的背景颜色更改为蓝色。请记住,有些按钮位于面板内部。 非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:5)

您可以使用这种递归搜索控件的通用扩展方法:

public static IEnumerable<T> GetChildControlsRecursive<T>(this Control root) where T : Control
{
    if (root == null) throw new ArgumentNullException("root");
    var stack = new Stack<Control>();
    stack.Push(root);
    while (stack.Count > 0)
    {
        Control parent = stack.Pop();
        foreach (Control child in parent.Controls)
        {
            if (child is T)
                yield return (T)child;
            stack.Push(child);
        }
    }
    yield break;
}

找到所有按钮并设置BackColor

var allButtons = this.GetChildControlsRecursive<Button>();
foreach (Button btn in allButtons)
    btn.BackColor = Color.Blue;

编辑我刚刚看过VB.NET标签。不管怎样,也许它很有帮助。 VB.NET没有yield,所以你可以把它放在C#的扩展库中。

这是一种VB.NET方法,它不使用延迟执行但返回列表:

Module ControlExtensions
    <System.Runtime.CompilerServices.Extension()> _
    Public Function GetChildControlsRecursive(Of T As Control)(root As Control) As IEnumerable(Of T)
        If root Is Nothing Then
            Throw New ArgumentNullException("root")
        End If
        Dim controls As New List(Of T)
        Dim stack = New Stack(Of Control)()
        stack.Push(root)
        While stack.Count > 0
            Dim parent As Control = stack.Pop()
            For Each child As Control In parent.Controls
                If TypeOf child Is T Then
                    controls.Add(DirectCast(child, T))
                End If
                stack.Push(child)
            Next
        End While
        Return controls
    End Function
End Module

用法:

Dim allButtons = Me.GetChildControlsRecursive(Of Button)()
For Each btn As Button In allButtons
    btn.BackColor = Color.Blue
Next

答案 1 :(得分:1)

表单是控件的容器;你有一个可用的属性叫做Form对象的控件。

Form.Controls property

此属性将包含表单上所有控件的列表。然后,您可以使用循环或LINQ简单地检查每个控件,看它是否为Button类型,如果是,则将背景颜色更改为蓝色。

这是一个使用LINQ的简单代码示例,它可以抓取表单上最多一层的所有控件:

Dim buttons = Me.Controls.SelectMany(Function(control) control.Controls).OfType(Of Button)().Union(Me.Controls.OfType(Of Button)())
For Each button As Button In buttons
    button.BackColor = Color.Blue
Next

如果您有一个更复杂的表单,嵌套控件中包含嵌套控件,您可以看到Tim提供的其他答案,或者一些在线示例。