2017-04-19 9 views
0

는 I 행 tsDeleteRowtsAddRow 추가 및 삭제를위한 DGridView DataGridView를 2 개 단추와 MenuStrip 이루어지는라는 UserCotrol있다. 버튼 (Ctrl + Insert)과 (Ctrl + Delete)에 대한 바로 가기 키를 각각 지정했습니다.를 Form1라는 이름의 또 다른 형태에 그런활성 객체 또는 선택된 객체의 단축키에서 이벤트를 발생시키는 방법은 무엇입니까?

Public Event ItemClick(ByVal sender As Object, ByVal e As System.EventArgs) 

Private Sub tsItem_Click(sender As Object, e As EventArgs) Handles tsDeleteRow.Click, tsAddRow.Click 
    RaiseEvent ItemClick(sender, e) 
End Sub 

, 내 아이 테이블, 예 내에서 UserControl DGridView 3 번 사용 :

다음은 버튼에 관해서 내 UserControl을 내 코드는 부분입니다. DGrid_1, DGrid_2DGrid_3. 다음은 Form1 내부의 이벤트 포수 코드입니다.

Private Sub DGrid_1_ItemClick(sender As Object, e As EventArgs) Handles DGrid_1.ItemClick 
    'do code 
End Sub 

Private Sub DGrid_2_ItemClick(sender As Object, e As EventArgs) Handles DGrid_2.ItemClick 
    'do code 
End Sub 

Private Sub DGrid_3_ItemClick(sender As Object, e As EventArgs) Handles DGrid_3.ItemClick 
    'do code 
End Sub 

물론 이러한 3 개의 개체에는 추가 및 삭제 행에 대한 동일한 바로 가기 키가 있습니다. 어떤 사람이 바로 가기 키를 실행했는지 어떻게 알 수 있습니까? 예를 들어 DGrid_2가 활성 상태 인 경우 Add key (Ctrl + Insert)에 대한 바로 가기를 사용했습니다. 행을 추가하는 코드는 어떻게 작성합니까 DGrid_2? 현재 코드가 첫 번째 객체에 행 추가 중 DGrid_1.

답변

0

올바르게 수행하지 않으면 약간 지저분 할 수도 있지만, 한 가지 방법은 클래스 수준 부울을 설정하는 것입니다.

클릭 또는 DGrid_1 활성화되면 다른 활성화 (또는 비활성화 DGrid_1) 때

Public Class myClass 

Dim isActive As Boolean 

그렇다면, 그 후, isActive = True 설정 예는 isActive = False 세트.

그런 식으로 부울 값을 확인할 수 있습니다.

If isActive = True Then 
    ' Code for DGrid_1 
ElseIf isActive = False Then 
    ' Code for DGrid_2 
End If 

는 쉬운 방법은, 도대체, 심지어 DataGridView.IsActive 유형의 방법이있을 수있을 수 있지만, 가능한 내 머리 위로 떨어져와 IDE없이이 그것에 대해 이동하는 방법 중 하나입니다.

편집하는 것은

또는 추가로, 나는 그런

Dim sName as String = Me.ActiveControl.Name 
' Above may need a Convert.ToString, not sure off the top of my head 

의 라인을 따라 뭔가가 생각, 당신은 sName의 값을 비교 한 후 사용하는 제어 결정할 수 있습니다.

0

이벤트 발생시 sender으로 설정 한 내용을 변경하십시오.sender은 이벤트를 발생시킨 개체를 나타내는 데 사용되므로이를 사용하여 사용자 컨트롤 중 어느 것이 키 누르기를 파악했는지 확인할 수 있습니다. 당신이 이벤트를 발생하고 각각에 대해 서로 다른 물건을 할 수있는 예를 구체적으로 확인하려면

Private Sub DGrid_ItemClick(sender As Object, e As EventArgs) Handles DGrid_1.ItemClick, DGrid_2.ItemClick, DGrid_3.ItemClick 
    Dim TargetGrid As DGridView = TryCast(sender, DGridView) 
    If TargetGrid IsNot Nothing Then 'Casting succeeded. 
     TargetGrid.DoYourStuff() 
    End If 
End Sub 

, 당신은뿐만 아니라 보낸 사람의 참조를 확인하실 수 있습니다 : 양식에서 다음

Private Sub tsItem_Click(sender As Object, e As EventArgs) Handles tsDeleteRow.Click, tsAddRow.Click 
    RaiseEvent ItemClick(Me, e) 'Me is the current user control. 
End Sub 

Private Sub DGrid_ItemClick(sender As Object, e As EventArgs) Handles DGrid_1.ItemClick, DGrid_2.ItemClick, DGrid_3.ItemClick 
    Dim TargetGrid As DGridView = TryCast(sender, DGridView) 
    If TargetGrid IsNot Nothing Then 'Casting succeeded. 

     If TargetGrid Is DGrid_1 Then 
      'Do stuff for DGrid_1. 
     ElseIf TargetGrid Is DGrid_2 Then 
      'Do stuff for DGrid_2. 
     ElseIf TargetGrid Is DGrid_3 Then 
      'Do stuff for DGrid_3. 
     End If 

    End If 
End Sub