我在{{ Html::link("route('EditUser',[$user->id])", 'Edit', array('id' => $user->id,'class' =>'btn btn-info'), true)}}
中有许多不同文字的按钮,我想找到带有特定字符串的按钮。
我目前这样做:
FlowLayoutPanel
是否可以做这样的事情?
Dim str as String = 'some text
For each btn as Button in FlowLayoutPanel.Controls
If btn.Text = str then
'do something with btn
End If
Next
答案 0 :(得分:3)
您可以使用LINQ,例如
Dim btn = myFlowLayoutPanel.Controls.
OfType(Of Button)().
FirstOrDefault(Function(b) b.Text = myText)
请注意,无论所有子控件是否为Buttons
,该代码都将有效,因为OfType
可确保忽略除Button
之外的任何内容。如果您知道每个子控件都是Button
,那么执行此操作会更有效:
Dim btn = myFlowLayoutPanel.Controls.
Cast(Of Button)().
FirstOrDefault(Function(b) b.Text = myText)
更有效率仍然这样做:
Dim btn = DirectCast(myFlowLayoutPanel.Controls.
FirstOrDefault(Function(b) b.Text = myText),
Button)
但差异可以忽略不计,如果效率是您的主要考虑因素,那么您可能根本就不应该使用LINQ。
另请注意,FirstOrDefault
仅适用于零,一个或多个匹配项。其他方法在其他情况下更合适:
First
:总会有至少一场比赛,但可能会超过一场。
FirstOrDefault
:可能没有任何匹配,可能不止一个。
Single
:总会有一场比赛。
SingleOrDefault
:可能没有匹配但永远不会超过一个。
如果您使用其中一种OrDefault
方法,则结果可能为Nothing
,并且在使用之前您应该始终测试Nothing
的结果。