政彦2005/12/16Windowsアプリケーションでマウス・カーソルが移動できる領域を制限したい場合、Cursorクラス(System.Windows.Forms名前空間)の静的プロパティであるClipプロパティに、その制限領域を指定すればよい。このClipプロパティには、スクリーン座標系のRectangle型の値で指定する必要がある(スクリーン座標系の値については、「TIPS:スクリーン座標←→クライアント座標の変換を行うには?」を参照されたい)。何らかのボタンがクリックされたときにマウス・カーソルの移動範囲を制限したいならば、そのボタンのClickイベント・ハンドラ内で、次の例1(C#)のようにCursor.Clipプロパティを設定すればよい(なおこの例では、X座標「100」、Y座標「200」の点から横幅「300」、縦幅「300」の四角い領域を指定している)。300);しかしCursor.Clipプロパティには使用上の注意点がある。アプリケーション起動直後から移動範囲を制限しようとして、Cursor.ClipプロパティをLoadイベント・ハンドラ内で指定しても利かないのだ。これを実現するためのベスト・タイミングはフォームのActivatedイベントである。これはフォームがアクティブ化されたとき(具体的には、フォームが表示されてアクティブになったときや、アクティブなウィンドウを切り替えた後で再度アクティブになったとき)に呼ばれるイベントだ。次のサンプル・プログラムでは、フォームのActivatedイベント・ハンドラで、マウス・カーソルの移動範囲を、フォームのウィンドウ領域のサイズに制限している。ウィンドウ領域の取得については「TIPS:クライアント領域やウィンドウ領域の座標を取得するには?」を参照してほしい。このフォームのウィンドウ領域(Bounds)はスクリーン座標で取得できるので、クライアント座標とスクリーン座標間の変換は必要ない。Subマウス・カーソルの移動可能領域を制限するサンプル・プログラム(上:C#、下:VB.NET)フォームがアクティブになったときにマウス・カーソルの移動範囲を制限するには、フォームのActivatedイベント・ハンドラにそれを実装すればよい。以上でマウス・カーソルの移動範囲の制限は完了だ。それでは逆に、この制限を解除するにはどうすればよいのだろうか?マウス・カーソルの移動範囲制限を解除するには?これを行うには、次の例2のようにCursor.ClipプロパティにRectangle型の「空」の値を指定すればよい。このRectangle型の「空」の値としては、Rectangle構造体(System.Drawing名前空間)の静的フィールドであるEmptyフィールドを利用する。Rectangle.Empty;前述のように、フォームがアクティブになったときにマウス・カーソルの移動範囲を制限するようにした場合、逆にフォームが非アクティブになったときに(つまりほかのウィンドウがアクティブになったときに)マウス・カーソルの移動制限を解除するとよい。することによって、ほかのアプリケーションをアクティブにした場合に再びマウス・カーソルが自由な範囲で使えるように戻るからだ。Explorer(以降、IE)をアクティブにした場合に(=フォームが非アクティブになった場合に)、IE上では再びマウス・カーソルが自由に使える。Windowsアプリケーションのフォームを再度アクティブにすると、Activatedイベントが発生して再びマウス・カーソルの移動範囲が制限される。フォームが非アクティブになるタイミングで発生するのが、フォームのDeactivateイベントである。次のサンプル・コードでは、フォームのDeactivateイベント・ハンドラ内でマウス・カーソルの移動制限を解除している。Subマウス・カーソルの移動制限を解除するサンプル・プログラム(上:C#、下:VB.NET)フォームが非アクティブになったときにマウス・カーソルの移動制限を解除するには、フォームのDeactivateイベント・ハンドラにそれを実装すればよい。マウス・カーソルの移動範囲を制限した場合、極力、Deactivateイベント・ハンドラに移動制限の解除を実装することが望ましい。ここでもし移動制限を解除しないと、ほかのアプリケーションをアクティブにしてもマウス・カーソルの移動範囲は限られたままになってしまう。要するに、ほかのアプリケーションに「マウス・カーソルが一部の領域でしか動かない」という迷惑が掛かってしまうのだ。マウス・カーソルの移動範囲の制限は、ウィンドウを移動したり、サイズ変更したり、最小化したりすることによっても、自動的に解除されてしまうので、注意してほしい。より自動抽出したものです。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。