동적 버튼 클릭 이벤트 핸들러
양식에서 동적으로 생성된 버튼이 100개 있습니다.이벤트 핸들러를 추가하려면 어떻게 해야 합니까?
AddHandler를 사용하여 모든 이벤트에 대한 처리기를 추가할 수 있습니다.
예를 들어, 다음과 같습니다.
AddHandler theButton.Click, AddressOf Me.theButton_Click
리드의 대답을 요약하자면, 당신은 다음 중 하나를 얻을 수 있습니다.Button
에서 온 물체Form
또는 다른 컨테이너를 추가하고 핸들러를 추가하거나, 또는 당신이 만들 수 있습니다.Button
프로그래밍 방식으로 개체를 표시합니다.
만약 당신이 그것을 얻는다면.Button
에서 온 물체Form
또는 다른 용기, 그러면 당신은 위에서 반복할 수 있습니다.Controls
의 수집.Form
또는 다음과 같은 기타 컨테이너 제어Panel
또는FlowLayoutPanel
등등.그런 다음 클릭 핸들러를 추가할 수 있습니다.
AddHandler ctrl.Click, AddressOf Me.Button_Click
(아래 코드와 같이 표시)
하지만 나는 그것의 종류를 확인하는 것을 선호합니다.Control
그리고 a에 캐스팅.Button
컨테이너의 다른 컨트롤(예: 레이블)에 대한 클릭 핸들러를 추가하지 않습니다.모든 이벤트에 대해 처리기를 추가할 수 있습니다.Button
이 시점에서 사용하여AddHandler
.
또는 다음을 생성할 수 있습니다.Button
아래의 두 번째 코드 블록에서와 같이 프로그래밍 방식으로 개체를 표시합니다.
그렇다면 당연히 아래의 세 번째 코드 블록과 같이 핸들러 메소드를 작성해야 합니다.
다음은 다음을 사용한 예입니다.Form
용기로, 하지만 당신은 아마도 사용하는 것이 더 나을 것입니다.Panel
또는 다른 컨테이너 제어.
Dim btn as Button = Nothing
For Each ctrl As Control in myForm.Controls
If TypeOf ctrl Is Button Then
btn = DirectCast(ctrl, Button)
AddHandler btn.Click, AddressOf Me.Button_Click ' From answer by Reed.
End If
Next
또는 다음을 생성합니다.Button
s 프로그래밍 방식으로, 이번에는 에 추가Panel
컨테이너.
Dim Panel1 As new Panel()
For i As Integer = 1 to 100
btn = New Button()
' Set Button properties or call a method to do so.
Panel1.Controls.Add(btn) ' Add Button to the container.
AddHandler btn.Click, AddressOf Me.Button_Click ' Again from the answer by Reed.
Next
그러면 당신의 핸들러는 이렇게 보일 것입니다.
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
' Handle your Button clicks here
End Sub
@Debasish Sahu, 당신의 대답은 다른 질문에 대한 대답입니다. 즉, 두 개의 컨트롤에 대한 공통 핸들러가 있을 때 어떤 버튼(또는 다른 컨트롤)이 클릭되었는지 어떻게 알 수 있습니까?그래서 이 질문에 대한 답을 드리려고 하는데, 이 질문은 당신의 질문과 거의 동일하지만 동일한 유형의 컨트롤을 처리할 때는 형식 변환 없이도 작동합니다.
Private Sub btn_done_clicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim selectedBtn As Button = sender
MsgBox("you have clicked button " & selectedBtn.Name)
End Sub
스위치 케이스를 사용하지 않고 어떤 버튼에서 호출되는지 보여줄 수 있는 공통 이벤트 핸들러가 필요했습니다.이런 식으로..
Private Sub btn_done_clicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox.Show("you have clicked button " & CType(CType(sender, _
System.Windows.Forms.Button).Tag, String))
End Sub
이 문제에 대한 변형 코드입니다.위의 코드를 사용하여 필요에 따라 클릭 이벤트를 얻었지만, 어떤 버튼이 클릭되었는지 확인하는 데 어려움을 겪었습니다.제 시나리오는 동적인 탭 페이지 수입니다.각 탭 페이지에는 차트 2개, DGV 2개, 라디오 버튼 한 쌍이 있습니다(모두 동적으로 생성됨).각 컨트롤은 탭과 관련된 고유한 이름을 가지고 있지만 탭 페이지가 20개인 경우 동일한 이름의 라디오 단추가 20개 있을 수 있습니다.라디오 버튼은 두 개의 그래프와 DGV 중 어느 것을 볼 수 있는지 전환합니다.다음은 라디오 버튼 중 하나를 선택한 경우의 코드입니다(차트와 DGV를 다시 스왑하는 거의 동일한 블록이 있음).
Private Sub radioFit_Components_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If sender.name = "radioFit_Components" And sender.visible Then
If sender.checked Then
For Each ctrl As Control In TabControl1.SelectedTab.Controls
Select Case ctrl.Name
Case "embChartSSE_Components"
ctrl.BringToFront()
Case "embChartSSE_Fit_Curve"
ctrl.SendToBack()
Case "dgvFit_Components"
ctrl.BringToFront()
End Select
Next
End If
End If
End Sub
이 코드는 모든 탭 페이지에 대해 실행되고 모든 탭 페이지에서 차트와 DGV를 전환합니다.sender.visible 검사는 폼을 만들 때 코드 실행을 중지하는 것입니다.
언급URL : https://stackoverflow.com/questions/7375061/dynamic-button-click-event-handler
'programing' 카테고리의 다른 글
XSSF Workbook - Java - POI .jar 해결 문제 (0) | 2023.05.31 |
---|---|
현재 활동에서 루트 보기 가져오기 (0) | 2023.05.31 |
위치 매개 변수가 있는 Git 별칭 (0) | 2023.05.31 |
Ruby 'require' 오류: 해당 파일을 로드할 수 없습니다. (0) | 2023.05.31 |
워크시트 기반 확인란 선택 여부 확인 (0) | 2023.05.31 |