2017-04-19 34 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 
相关问题