2016-08-05 118 views
0

我已經下鼠標光標提示設置,但它是閃爍的時候,即使光標不移動。有關如何防止工具提示閃爍的任何想法?提示 - 閃爍

代碼:

Private Sub DataGridView1_MouseHover(sender As Object, e As EventArgs) Handles DataGridView1.MouseHover 


     Dim cur = DataGridView1.HitTest(e.X, e.Y) 

     If cur.RowIndex >= 0 AndAlso cur.ColumnIndex >= 0 Then 

      DataGridView1.Cursor = Cursors.Help 

      ToolTip1.Active = True 
      Dim cp = Cursor.Position 
      cp.Y += CInt(Cursor.Size.Height * 0.2) 
      cp.X += CInt(Cursor.Size.Width * 0.8) 
      ToolTip1.Show("Details...", Me, PointToClient(cp)) 

     Else 
      DataGridView1.Cursor = Cursors.Default 
      ToolTip1.Active = False 
     End If 

    End Sub 
+0

什麼東西閃爍,光標或工具提示?另外,你在哪裏執行此代碼? –

+0

對不起,我編輯了問題,工具提示閃爍,並且我在Datagrid_mouseMove事件中有此代碼。 – LuckyLuke82

+1

現在我還沒有使用過非常多的數據網格,所以我不知道該控件的行爲如何,但是如果您在'MouseHover'事件中嘗試這樣做會發生什麼? –

回答

1

看來,一旦顯示工具提示中,DataGridView暫時失去焦點,經過一番測試。當它重新獲得焦點的MouseMove事件被再次調用這會導致工具提示關閉並再次重新顯示本身,所以它繼續無限,吃CPU和RAM一些,直到您移動鼠標在細胞外。

解決這個問題的最簡單的方法是讓請檢查是否鼠標在移動或不自上次MouseMove叫,那麼只有重新顯示工具提示如果鼠標移動。

我用CellMouseMoveCellMouseLeave事件,而不是爲您節省額外的檢查,如果鼠標在一個小區:

Dim PreviousCursorPos As New Point(-1, -1) 

Private Sub DataGridView1_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseMove 
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 AndAlso _ 
     PreviousCursorPos <> Cursor.Position Then 'If the mouse is not in the same position as before, then execute the code. 

     DataGridView1.Cursor = Cursors.Help 
     ToolTip1.Active = True 

     Dim cp = Cursor.Position 
     cp.Y += CInt(Cursor.Size.Height * 0.2) 
     cp.X += CInt(Cursor.Size.Width * 0.8) 

     ToolTip1.Show("Details...", Me, Me.PointToClient(cp)) 

     PreviousCursorPos = Cursor.Position 
    End If 
End Sub 

Private Sub DataGridView1_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave 
    DataGridView1.Cursor = Cursors.Default 
    ToolTip1.Active = False 
End Sub 

的工具提示移動鼠標時會閃爍了一下,但一旦它仍然有贏這不是一個問題。

+0

好的,請參閱我編輯的問題,您將在mouse_Hover事件中看到完整的代碼。我使用x和y座標來顯示僅在Datagrid單元格上的幫助光標,而不是整個數據網格控件 - 並使用工具提示文本。我不知道Cursor.Position如何以相同的方式工作。 – LuckyLuke82

+0

如前所述,此代碼奇怪地工作,但有錯誤,並且僅當OwnerDraw屬性設置爲True。但是,如果我嘗試更改工具提示的背景顏色,閃爍會再次出現。 – LuckyLuke82

+0

@ LuckyLuke82:已更新的答案。 - 看起來很奇怪,你需要'OwnerDraw'爲True ...順便說一句,你甚至可以改變ToolTip的背景嗎?或者你不使用標準的嗎? –