MouseHover / MouseLeave时显示/隐藏TextBox

时间:2015-11-26 15:10:19

标签: vb.net textbox

如何根据事件鼠标悬停或鼠标移动显示或隐藏TEXTBOX?我将文本框放在图片上。 我只是尝试通过将文本框可见性的属性设置为 false 来编码,但没有任何反应。我认为代码丢失了吗?

{{1}}

1 个答案:

答案 0 :(得分:0)

我假设您希望在悬停图片后立即显示文本框。

textbox在隐身时不会收听mouse_enter个事件。

在图片框中使用mouse events,而不是文本框。

值得一提的是,当你将鼠标悬停在现在可见的文本框上时,你的mouse leave会为图片框启动,这会让它看不见......

    Dim i_Am_in_the_picture_box as Boolean 'global variable to your class

    Private Sub picbox1_MouseHover(sender As Object, e As EventArgs) Handles picbox1.MouseHover
        TextBox1.Visible = True
    End Sub

    Private Sub picbox1_MouseLeave(sender As Object, e As EventArgs) Handles picbox1.MouseLeave
        TextBox1.Visible = False
    End Sub

当触发picturebox事件时,您可能必须编写一些代码来检查光标何时位于mouse_leave的范围内(Becaue进入文本框,将触发mouse_leave图片框的事件)。

如果光标仍在图片框范围内,则不要隐藏textbox上的picbox.mouse_leave

修改

除此之外,根据您的评论,

  

感谢。但它显示了鼠标悬停的文本框。我有一个   牙齿(下牙和上牙)的图片,这是一个PNG文件。什么时候   牙科医生鼠标悬停在特定的牙齿上,文本框将显示和   牙医可以把牙齿的治疗历史......简而言之,我想要   鼠标悬停在特定区域时,文本框可见   PIC。那可能吗?抱歉,我只是一名学生。我试过谷歌搜索但是   找不到任何关于此的文章/主题。 :)

你必须为每颗牙齿定义自定义边界,然后在mouse_move上,检查光标位置是否在其中一个边界内。如果是,请显示适用的textbox.

以下是实际工作代码,向您展示如何完成此操作。

  1. 以下示例中,两个“隐形”面板位于图片框上方(让我们说“tooth1”和“tooth2”。)

  2. 我们使用隐形面板的位置和尺寸参数构建两个自定义矩形。

  3. 我们抓住图片框的MouseMove事件,检查我们的光标是否在我们创建的一个矩形中。如果是,我们会显示一个特定的文本框(我们隐藏其他文本框可见)

  4. 这可以用更少的代码完成,但该示例应该准确解释该概念的工作原理。

    Public Class Form2
    
        Dim tooth1 As New Rectangle
        Dim tooth2 As New Rectangle
    
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            'use the dummy invisble panel's location and size to create our wto rectnagles on the screen
            tooth1 = New Rectangle(dummyPanel_for_tooth_1.Location, dummyPanel_for_tooth_1.Size)
            tooth2 = New Rectangle(dummyPanel_for_tooth_2.Location, dummyPanel_for_tooth_2.Size)
    
        End Sub
    
        Private Sub _set_all_other_textboxes_invisible(visibleTextboxName As String)
    
            If TextBox1.Name <> visibleTextboxName Then TextBox1.Visible = False
            If TextBox2.Name <> visibleTextboxName Then TextBox2.Visible = False
    
        End Sub
    
        Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
            If tooth1.Contains(e.Location) Then
    
                'we are inside tooth 1 bounds
                TextBox1.Visible = True
    
                'hide the other textboxes we are not working with.
                _set_all_other_textboxes_invisible(TextBox1.Name)
    
                'we can exit here, no need to do any furher testing
                Exit Sub
    
            End If
    
            If tooth2.Contains(e.Location) Then
    
                'we are inside tooth 2 bounds
                TextBox2.Visible = True
    
                'hide the other textboxes we are not working with.
                _set_all_other_textboxes_invisible(TextBox2.Name)
    
                'we can exit here, no need to do any furher testing
                Exit Sub
    
            End If
        End Sub
    
    End Class