AddHandler用于自定义控件错误visual studio

时间:2012-05-27 21:37:25

标签: vb.net controls mouseenter addhandler

我有一个MouseEnter事件,它当前处理我的表单上的一些自定义控件。该计划是纸牌游戏。我有一个集合(handCards),当用户绘制卡片时,它会被填充,然后它会将最新的卡片添加到表单中。此系列包含各种自定义类型的卡片,所有这些卡片都继承自picturebox。从卡座中绘制卡片并将其添加到表单中可以正常工作。我遇到的麻烦是,在运行时,在绘制卡并将其添加到表单后,我创建了一个addhandler代码行,让这些卡响应我的MouseEnter事件,但我的addhandler代码行告诉我MouseEnter不是对象的事件。如何解决这个问题,以便在绘制卡片并将其添加到表单后,当鼠标进入新的自定义控件时,我的MouseEnter事件会触发?这是我尝试过的众多事情之一,我认为应该是最简单,最简单的事情。

deck.DrawCard()
AddHandler handCards(handCards.Count).MouseEnter, AddressOf Cards_MouseEnter

P.S。 MouseEnter事件适用于运行时之前在窗体上的自定义控件,它所做的只是获取控件的图像,并通过将图像放在窗体上的更大的卡上来放大它。

4 个答案:

答案 0 :(得分:1)

我假设你的handCards Collection是一个Object Collection。尝试使用CType将其转换为正确的类型,如下所示:

AddHandler CType(handCards(handCards.Count), PictureBox).MouseEnter, AddressOf Cards_MouseEnter

正如@Jason提到的那样使用handCards.Count作为索引将不起作用,因为它是您的索引为零的项目总数,并且将比Count少一个。 因此handCards(handCard.Count)应为handCards(handCards.Count -1)

答案 1 :(得分:1)

您可以使用通用集合来避免类型转换。

Private handCards As System.Collections.Generic.List(Of PictureBox) _
    = New System.Collections.Generic.List(Of PictureBox)(52)

您可以使用PictureBox个对象

的数组
Private handCards(5) As PictureBox

请记住,您必须通过为数组的每个元素分配PictureBox对象来初始化集合或数组。

现在,您可以将处理程序添加到数组的PictureBox元素,因为PictureBox派生自实现Control事件的MouseEnter

deck.DrawCard()
If handCards.Count > 0 andAlso handCards.Last() IsNot Nothing then
    AddHandler handCards.Last().MouseEnter, AddressOf Cards_MouseEnter
End If

你的处理程序看起来像这样

Private Function Cards_MouseEnter(sender As Object, e As System.EventArgs) As Object
    ' Handle mouse events here
End Function

答案 2 :(得分:1)

所以这就是我修复它的方式,以防有人遇到这篇文章。做了一个单独的Sub来做AddHandler。程序绘制卡后,它会调用此方法,然后添加我需要的MouseEnter处理程序。 ByVal是关键。我原本以为我应该使用ByRef,但没有。 MouseEnter是一个控件事件,但显然不是Object,所以现在它可以工作。

Public Sub addHandlers(ByVal inputObject As Control)
    AddHandler inputObject.MouseEnter, AddressOf Cards_MouseEnter
End Sub

答案 3 :(得分:1)

幸运的是我正在努力,我成功地成功解决了这个问题。

首先添加事件处理程序方法您希望在哪里测试我在Button_Click中添加了此函数

addHandlers(Label1) 'Label one is the control on which I have to attach Mouse Events (Enter,LEave)

现在“addHandlers”功能实现

 Public Sub addHandlers(ByVal obj1 As Control)
    AddHandler obj1.MouseEnter, AddressOf MouseEventArgs
    AddHandler obj1.MouseLeave, AddressOf _MouseLeave
 End Sub

现在鼠标事件:

Private Function _MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) As Object
    Try
        Me.Cursor = Cursors.Default
    Catch ex As Exception

    End Try

End Function

Private Function MouseEventArgs(ByVal sender As Object, ByVal e As System.EventArgs) As Object
    Try
        Me.Cursor = Cursors.Hand
    Catch ex As Exception

    End Try
End Function