2012-02-03 112 views
4

當ToolStripButton.click事件發生時,我無法更改光標。更改光標VB.NET

我有2個按鈕叫「Rechercher」。

編輯:只有按鈕正在工作。看來,ToolStripButton取消我的光標... THX的幫助

Public Class FenetrePrincipale 

    Private WithEvents _btnRechercher As New Windows.Forms.ToolStripButton("Rechercher") 
    Private WithEvents btnRechercherAccesBtn As New Button 

    Private Sub Rechercher(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _btnRechercher.Click, btnRechercherAccesBtn.Click 
     Try 
      Me.Cursor = Cursors.WaitCursor 
      'WAITING FOR THE CODE TO FINISH (2 sec) 
     Finally 
      Me.Cursor = Cursors.Default 
     End Try 
    End Sub 
End Class 
+0

這不是唯一的區別。 AccessBtn在運行過程之前設置光標*。您的程序中是否有「DoEvents」呼叫? – LarsTech 2012-02-03 19:53:24

+0

也許你應該在你的sub中試用MsgBox(「hello」)來測試事件處理程序(以測試你是否點擊某件事情時發生或不) – FeRtoll 2012-02-07 15:02:59

回答

3

這是我得到這個工作的唯一方法。

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 
End Function 

Public Class FenetrePrincipale 

    Private WithEvents _btnRechercher As New Windows.Forms.ToolStripButton("Rechercher") 
    Private WithEvents btnRechercherAccesBtn As New Button 

    Private Sub Rechercher(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRechercherAccesBtn.Click 
     Try 
      Me.Cursor = Cursors.WaitCursor 
      'code... 
     Finally 
      Me.Cursor = Cursors.Default 
     End Try 
    End Sub 

    Private Sub RechercherToolStripButton(ByVal sender As Object, ByVal e As System.EventArgs) Handles _btnRechercher.Click 
     Me.UseWaitCursor = True 
     SendMessage(Me.Handle, &H20, Me.Handle, New IntPtr(1)) 

     Rechercher(Nothing, Nothing) 

     Me.UseWaitCursor = False 
    End Sub 
End Class 
2

也許你應該嘗試一些採樣,如:

Private Sub MainFrame_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Search() 
End Sub 

Private Sub Search() 
Try 
    Me.Cursor = Cursors.WaitCursor 
    UseWaitCursor = True 
    Application.DoEvents() 
    Threading.Thread.Sleep(1000) 'WAITING FOR THE CODE TO FINISH 
Finally 
    UseWaitCursor = False 
    Me.Cursor = Cursors.Default 
    Application.DoEvents() 
End Try 
End Sub 

問題是你沒有任何停頓,其中代碼應該執行,以便快速執行。

+0

我不理解睡眠的使用。我等一秒鐘沒用? – Naster 2012-02-06 15:48:40

+0

不,但是也許你的代碼應該在try和finally之間做的太快,所以你不能看到改變。要測試它是否有效,你可以用睡眠測試:)希望你明白我想說的話。 – FeRtoll 2012-02-07 02:07:39

+0

設置光標時,我等待2秒鐘完成代碼。當事件來自我的工具欄按鈕時,我不能改變光標,否則它會工作。 – Naster 2012-02-07 14:37:41