Vb.net Can';点击按钮

Vb.net Can';点击按钮,vb.net,button,Vb.net,Button,所以,我正在开发一个YouTube模拟游戏。目前我正在YouTube网站上工作。在游戏中,你应该能够自定义你的频道头像和横幅。因此,就像在真实的YouTube网站上一样,我创建了两个按钮,当单击它们时,会打开一个OpenFileDialog,播放器应该在其中选择图像文件。唯一的问题是,由于某种原因,您无法单击该按钮下面是表单的外观: 这是我的代码: #Region "Edit Buttons" Sub ShowEditBanner() Handles BannerBox.MouseEn

所以,我正在开发一个YouTube模拟游戏。目前我正在YouTube网站上工作。在游戏中,你应该能够自定义你的频道头像和横幅。因此,就像在真实的YouTube网站上一样,我创建了两个按钮,当单击它们时,会打开一个
OpenFileDialog
,播放器应该在其中选择图像文件。唯一的问题是,由于某种原因,您无法单击该按钮下面是表单的外观:

这是我的代码:

#Region "Edit Buttons"
    Sub ShowEditBanner() Handles BannerBox.MouseEnter
        BannerEditButton.Visible = True
        AvatarEditButton.Visible = True
        BannerEditButton.BringToFront()
        AvatarEditButton.BringToFront()
    End Sub

    Sub ShowEditAvatar() Handles AvatarBox.MouseEnter
        BannerEditButton.Visible = True
        AvatarEditButton.Visible = True
        BannerEditButton.BringToFront()
        AvatarEditButton.BringToFront()
    End Sub

    Sub HideEditBanner() Handles BannerBox.MouseLeave
        BannerEditButton.Visible = False
        AvatarEditButton.Visible = False
    End Sub

    Sub HideEditAvatar() Handles AvatarBox.MouseLeave
        BannerEditButton.Visible = False
        AvatarEditButton.Visible = False
    End Sub
#End Region

    Sub EditAvatar() Handles AvatarEditButton.Click
        If AvatarFileDialog.ShowDialog = DialogResult.OK Then
            Try
                Dim Img As Image = Image.FromFile(AvatarFileDialog.FileName)
                AvatarBox.Image = Img
            Catch ex As Exception
                MsgBox("Invalid file.", MsgBoxStyle.Critical, "Error")
            End Try
        End If
    End Sub
任何帮助都将受到感谢


~Mika/OneByte

当按钮的
MouseEnter
事件试图显示按钮时,您遇到的是一个错误,而AvatarBox的
MouseLeave
事件试图隐藏按钮时,该错误就会发生

要修复此问题,只需检查
MouseLeave
事件中的鼠标是否仍在控件的边界内。如果没有:隐藏按钮

If AvatarBox.ClientRectangle.Contains(Me.PointToClient(Cursor.Position)) = False Then
    AvatarEditButton.Visible = False
End If

该逻辑适用于两个控件。

您不应手动创建事件处理程序,使用“代码编辑器”窗口中的下拉列表,或将“属性窗格”视图更改为“事件”,然后单击所需的事件处理程序
EditAvatar
不是合法事件签名这是当鼠标进入/离开按钮时尝试显示/隐藏按钮时发生的错误。不久前我自己也遇到了这个问题,让我检查一下我的代码并为您写一个答案……为了添加到Proputix的评论中,您显示的事件处理程序的参数应该是
(发送者作为对象,e作为事件参数)
。我同意他不应该手动添加处理程序,但当以这种方式添加处理程序时,这并不重要。如果声明正确,它就是同一个东西,下拉列表就会找到它。如果您通过AddHandler代码添加它,那么我会说这是错误的,除非您真的知道自己在做什么。在某些情况下,您需要以这种方式添加处理程序。动态添加控件就是一个例子。你仍然对此有问题吗?这有点奏效。我现在可以单击AvatarEditButton,但不能单击BannerEditButton。我的代码现在看起来是这样的:@OneByte\:如果您只需更改为正确的按钮和容器名称,同样的方法当然也适用于
BannerBox.MouseLeave
。我只是懒得写这两个:)。编辑:正如我在你的代码中看到的,你可以删除整个
HideEditBanner()
方法,然后像这样声明你的另一个方法:
Sub-HideEditAvatar()处理AvatarBox.MouseLeave,BannerBox.MouseLeave