.NET Frameworkでマウスカーソルの砂時計化と解除を自動で行うクラス

現在、VB.NETのシステムを改修しているのでVB.NETのソースコードです。
まず、こんなクラスを作ります。
(フォーム内のコントロールをdisableにするコードも余分に入ってます)


Public Class FormWait Implements IDisposable Private frm As Form Private ctls As New ArrayList Private cur As Cursor Public Sub New(ByVal _frm As Form) frm = _frm cur = frm.Cursor frm.Cursor = Cursors.WaitCursor For Each ctl As Control In frm.Controls If ctl.Enabled Then ctl.Enabled = False ctls.Add(ctl) End If Next End Sub Public Sub Dispose() Implements System.IDisposable.Dispose For Each ctl As Control In ctls ctl.Enabled = True Next frm.Cursor = cur End Sub End Class

次に、こんな感じでtry~Finallyで使用します。


Dim wait As New FormWait(Me) Try ' ' 主処理・・・ ' Finally wait.Dispose() End Try

using句が使えるバージョンならusing句のほうが良いと思います。
ちなみに、using句はtry~Finallyのシンタックス・シュガーです。
実はDispose()を呼ばなければいけない仕様は、あまり好きではなく
C++のようにデストラクタがインスタンスのスコープと連動していないのが
VB.NETやC#でかなり残念なことだと思っています。
ただ、これはガーベージコレクションと引き換えに発生した仕様で
大きなメリットに隠れた小さなデメリットなのでしょう・・・

Author: kachi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です