에 다른 텍스트를 가진 버튼이 많이 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
이런 식으로 할 수 있습니까?
Dim str as String = 'some text
Dim btn as Button = FlowLayoutPanel.Controls.Button.Text with that string
'do something with btn
LINQ를 사용할 수 있습니다.
Dim btn = myFlowLayoutPanel.Controls.
OfType(Of Button)().
FirstOrDefault(Function(b) b.Text = myText)
코드는 모든 자식 컨트롤이 있는지 여부에 관계없이 작동 Buttons
하므로 OfType
a 이외의 항목 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
일치하는 항목이 0 개, 하나 이상인 경우에만 적합합니다. 다른 경우에는 다른 방법이 더 적합합니다.
First
: 항상 최소한 하나의 일치가 있지만 하나 이상일 수 있습니다.
FirstOrDefault
: 일치하는 항목이 없을 수 있으며 둘 이상이있을 수 있습니다.
Single
: 항상 정확히 하나의 일치가 있습니다.
SingleOrDefault
: 일치하는 항목이 없을 수 있지만 두 개 이상일 수는 없습니다.
OrDefault
방법 중 하나를 사용 하면 결과가 나올 수 있으며 사용하기 전에 Nothing
항상 그 결과를 테스트해야 Nothing
합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다