一時的に外部からの入力を拒絶する

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。

 時間がかかる処理などで、その処理の間にボタンが押されるなどの入力がされては困る場合、フォームのEnabledをFalseにする事で入力を拒絶することができる。 また、Form.Cursorプロパティをビジー状態のカーソルに変更することで、ユーザーにビジー状態であることを通知することができる。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
' 入力を拒絶
Me.Enabled = False

' マウスカーソルをビジー状態のカーソルに
Me.Cursor = Cursors.WaitCursor

'
' 何らかの時間がかかる処理
'

' 入力を再開
Me.Enabled = True

' マウスカーソルを元に戻す
Me.Cursor = Cursors.Arrow
C#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
// 入力を拒絶
this.Enabled = false;

// マウスカーソルをビジー状態のカーソルに
this.Cursor = Cursors.WaitCursor;

//
// 何らかの時間がかかる処理
//

// 入力を再開
this.Enabled = true;

// マウスカーソルを元に戻す
this.Cursor = Cursors.Arrow;

 ただし、例外処理などを加える場合は、Finally文に元に戻す作業を記述し、必ず元の状態にさせる必要がある。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
013
Me.Enabled = False
Me.Cursor = Cursors.WaitCursor

Try
    '
    ' 何らかの時間がかかる処理
    '
Finally

    Me.Enabled = True
    Me.Cursor = Cursors.Arrow

End Try
C#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
this.Enabled = false;
this.Cursor = Cursors.WaitCursor;

try
{
    //
    // 何らかの時間がかかる処理
    //
}
finally
{
    this.Enabled = true;
    this.Cursor = Cursors.Arrow;
}