私はあなたのコードで小さなテストをしました。コードを使用すると、VS2012 が表示されませんでしたCursor.Current
が、使用時に例外がスローされませんでした。だから私はそれを
Me.Cursor = Cursors.WaitCursor
Dim result As DialogResult = printDialog.ShowDialog()
If result = DialogResult.Cancel Then
Return
End If
' not necesary any more
'Cursor.Current = Cursors.WaitCursor
printDialogを表示した後、WaitCursorが残りました。
編集: Cursor.Current と Cursorの違いに関するかなり良い説明が見つかりました!
EDIT2:上記の@HansPassantの例からHourGlassクラスを利用するようにコードを変更しました。テキストボックスに入ってもWaitCursorが残るようになりました。とにかく - たとえば、境界線の上にカーソルを置いたときに、waitCursor を失うことができました。テキストボックス。
全体として、テキスト aso を入力することがまだ可能な場合に、waitCursor を強制するのはあまり良くないと思います。おそらく、ある種のアクションが終了するまでコントロールを無効にし、その後カーソルを元に戻すことを検討するかもしれません。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Hourglass.Enabled = True
Dim result As DialogResult = PrintDialog1.ShowDialog()
If result = Windows.Forms.DialogResult.Cancel Then
Return
End If
'Cursor.Current = Cursors.WaitCursor
End Sub
Hourglass.vb - vb.net に変換するときに間違いがなかったといいのですが
Public Class Hourglass
Implements IDisposable
Public Shared Property Enabled As Boolean
Get
Return Application.UseWaitCursor
End Get
Set(ByVal value As Boolean)
If value = Application.UseWaitCursor Then Return
Application.UseWaitCursor = value
Dim f As Form = Form.ActiveForm
If Not f Is Nothing AndAlso f.Handle <> IntPtr.Zero Then
SendMessage(f.Handle, 32, f.Handle, 1)
End If
End Set
End Property
<System.Runtime.InteropServices.DllImport("user32.dll")>
Private Shared Function SendMessage(hWnd As IntPtr, msg As IntPtr, wp As IntPtr, lp As IntPtr) As IntPtr
End Function
Public Sub Dispose() Implements IDisposable.Dispose
Enabled = False
End Sub
End Class