none
Win7下ToolTip.SetToolTip會自動觸發MouseMove的問題 RRS feed

  • 問題

  • 各位前輩午安~

    小弟在Win7下發現ToolTip.SetToolTip會自動觸發MouseMove事件

    因此撰寫下面這段Code來測試

    Public Class Form1
      Dim i As Integer
      Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        i += 1
        Me.Text = i.ToString
    
        '下列這行在Win7下會影響控制項MouseMove事件觸發
        Me.ToolTip1.SetToolTip(Me, i.ToString)
      End Sub
    End Class
    


    該測試程式在XP下無此問題

    但在Win7下執行滑鼠放在表單上不動卻會一直觸發

    把SetToolTip註解掉就正常

    小弟對此現象十分的不解

    不知是否是小弟漏了哪個環節

    墾請各位前輩予以提點

    thx


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年4月30日 上午 03:56

解答

  • Hi,

    補充一下跟Bill叔討論的結果

    當把SetToolTip移到Button或是熱鍵觸發

    此現象不會發生

    因此推測是ToolTip顯示時遮蔽了下方元件

    導致Win7又觸發了MouseMove事件

    改用label模擬測試,得到一樣的結果

    也許是Win7對MouseMove的偵測做了些修改

     

    Dim i As Integer = 0
    Dim label As New Label
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    Me.Text = i
    i += 1
    
    label.Location = e.Location
    label.Text = "TEST"
    label.Parent = Me
    label.Show()
    label.Hide()
    'Me.ToolTip1.SetToolTip(Me, "XXXXXX")
    End Sub

     


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年5月1日 上午 02:48

所有回覆

  • Hi,

    補充一下目前暫時的解法

    Public Class Form1
      Dim i As Integer
      Dim oldLocation As Point
      Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If oldLocation <> e.Location Then
          oldLocation = e.Location
          i += 1
          Me.Text = i.ToString
          Me.ToolTip1.SetToolTip(Me, i.ToString)
        End If
      End Sub
    End Class


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年4月30日 上午 08:44
  • Hi,

    補充一下跟Bill叔討論的結果

    當把SetToolTip移到Button或是熱鍵觸發

    此現象不會發生

    因此推測是ToolTip顯示時遮蔽了下方元件

    導致Win7又觸發了MouseMove事件

    改用label模擬測試,得到一樣的結果

    也許是Win7對MouseMove的偵測做了些修改

     

    Dim i As Integer = 0
    Dim label As New Label
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    Me.Text = i
    i += 1
    
    label.Location = e.Location
    label.Text = "TEST"
    label.Parent = Me
    label.Show()
    label.Hide()
    'Me.ToolTip1.SetToolTip(Me, "XXXXXX")
    End Sub

     


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年5月1日 上午 02:48