忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

フォームのマウスカーソルを待機状態する方法について

通常、長い処理を行うプログラムの場合、処理を行っている間にマウスカーソルを待機状態にして、現在処理中であることをユーザに示します。 これを行うにはフォームの Cursor プロパティを Cursors.WaitCursor に設定します。
また、元に戻す時は Cursor プロパティを Cursors.Default に設定します。

フォームのマウスカーソルを待機状態する方法

Public Class frmCursor

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'フォームのカーソルを待機状態にする
        Me.Cursor = Cursors.WaitCursor

        '10秒待つ(長い処理の代わりにSleep関数を用いる)
        System.Threading.Thread.Sleep(10000)

        'フォームのカーソルを元に戻す
        Me.Cursor = Cursors.Default
    End Sub

End Class

上のプログラムで「長い処理の代わり」と書きましたが、実際にはデータベース処理など時間の掛かる処理を書くわけですが、 その中でエラーの対応の為に Try ... Catch ... End でエラー処理を記述すると思います。
このエラー処理の中で適切にカーソルを元に戻してやらないと、カーソルが待機状態のままになってしまいます。
(これは明らかなバグで、フォーム上の処理はできるが、カーソルが矢印に戻ってないので変な感じになります)

これを回避するためにも、カーソル設定処理は Try ... Catch ... End の外側で行うか、 もしくは以下のソースの様に TryFinnaly の中で行うと良いと思います。

カーソル処理を Finally ブロックで行う方法

Public Class frmCursor

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            'フォームのカーソルを待機状態にする
            Me.Cursor = Cursors.WaitCursor

            '10秒待つ(ここでは通常の処理においてエラーが発生するかもしれない)
            System.Threading.Thread.Sleep(10000)

        Catch ex As Exception
            'ここに例外処理を記述する

        Finally
            'フォームのカーソルを元に戻す
            Me.Cursor = Cursors.Default
        End Try
    End Sub

End Class

関連する記事

フォームクラス生成時に設定値を同時に渡す方法
フォーム上の複数のコントロール(TextBox)の入力変化を確認する方法について
フォームのマウスカーソルを待機状態する方法について
フォームクラスの継承の方法について











PR

コメント

コメントを書く