2017-04-19 80 views
0

我有一個名爲DGridView一個DataGridView,並用2個按鈕將MenuStrip組成UserCotrol用於添加tsAddRow和刪除行tsDeleteRow。我分別爲按鈕(Ctrl + Insert)和(Ctrl + Delete)分配了一個快捷鍵。如何從活動或選定對象的快捷鍵中提取事件?

這是我爲我的用戶代碼與問候的按鈕部分:

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 

然後在名爲Form1中另一種形式,我用我的用戶DGridView 3次,我的子表,恩。 DGrid_1DGrid_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 

Ofcourse這3個對象將具有相同的快捷鍵Add和Delete Row。我如何確定哪一個人開啓了快捷鍵?例如,DGrid_2是Active,然後我使用Add鍵的快捷鍵(Ctrl + Insert)。我將如何做代碼添加行上DGrid_2?我目前的代碼是在第一個對象上添加行DGrid_1

回答

0

這樣做的一種方式,雖然如果不正確的話可能會變得有點混亂,但是要設置一個類級布爾值。

Public Class myClass 

Dim isActive As Boolean 

然後,點擊時,或激活DGrid_1,激活時,其它(或停用DGrid_1)設置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 
相關問題