Har*_*son 1 .net vb.net properties button winforms
是否可以更改表单/项目上所有按钮的属性?例如,我想将所有按钮的背景颜色更改为蓝色.请记住,有些按钮位于面板内部.任何帮助是极大的赞赏 :)
您可以使用这种递归搜索控件的通用扩展方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
找到所有按钮并设置BackColor:
var allButtons = this.GetChildControlsRecursive<Button>();
foreach (Button btn in allButtons)
btn.BackColor = Color.Blue;
Run Code Online (Sandbox Code Playgroud)
编辑我刚看到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
Run Code Online (Sandbox Code Playgroud)
用法:
Dim allButtons = Me.GetChildControlsRecursive(Of Button)()
For Each btn As Button In allButtons
btn.BackColor = Color.Blue
Next
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |