2015-10-09 43 views
0

我想在一個WinForms mouseDown事件,能夠做一些代碼,直到一定的秒或MouseUp事件已經被解僱掉do while循環下去,直到按鈕狀態已經改變

我想是這樣這

Dim counter As Integer = 0 
Do Until Button.Key IsNot MouseDown 
    counter += 1 
    If counter > 3 
     Exit Do Loop 
    End If 
    Application.DoEvents() 
Loop 

現在我有像

seconds = 0 
m_mouseButtonIsNotDown = False 
Do Until m_mouseButtonIsNotDown 
    If e.Button = Windows.Forms.MouseButtons.Left Then 
     seconds += 1 
     If seconds > 5 Then 
      m_mouseButtonIsNotDown = True 
     End If 
    End If 
    Application.DoEvents() 
Loop 

我尋找所需的行爲方式是,如果他們讓一定量的循環處理的範圍內去按鈕如果它只是一個簡單的鼠標點擊事件的代碼。如果mousedown已被保存超過3或5秒,則切換到拖放模式,以便它們可以將所需的行移動到另一個datagridview。我試圖使用Timer和StopWatch類,它不工作,我也不會期望它。如果我有鼠標點擊事件和mousedown事件,因爲mousedown在基本點擊事件上執行,它不起作用。有任何想法嗎?請記住,它不能依賴於mouseUp事件,因爲拖放操作無法進行。

+0

爲什麼你一直試圖改變代碼片段?它編譯得很好,讓HitTestInfo可用對其他用途很重要。 –

+0

@HansPassant它不會編譯,除非您告訴您調暗的是什麼。只是說昏暗的命中= DataGridView1.HitTest(downPos.X,downPos.Y),而不作爲條款不編譯 –

+0

每個人都使用選項推斷,缺省設置。如有必要,請提出一個問題。 –

回答

2

永遠,永遠使用的DoEvents()來解決問題。定時器可以工作。但這不是正確的方法。您想在用戶按住左按鈕的同時移動鼠標時開始拖動。像這樣:

Private downPos As Point 

Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown 
    downPos = e.Location 
End Sub 

Private Sub DataGridView1_MouseMove(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseMove 
    If e.Button = MouseButtons.Left Then 
     If Math.Abs(downPos.X - e.X) >= SystemInformation.DoubleClickSize.Width Or 
      Math.Abs(downPos.Y - e.Y) >= SystemInformation.DoubleClickSize.Height Then 
      Dim hit = DataGridView1.HitTest(downPos.X, downPos.Y) 
      If hit.RowIndex >= 0 Then 
       '' Start dragging row 
       ''... 
      End If 
     End If 
    End If 
End Sub