次の方法で共有


System.Windows.Forms.TextBox 上で、Alt キー + テンキーの 3 を入力すると例外が発生することがある

こんにちは、Platform SDK (Windows SDK) サポートチームです。

System.Windows.Forms.TextBox コントロールは、文字の入力や表示が可能なため、Windows フォームアプリケーションを開発すると、広く利用されるコントロールかと思います。

今回は、この System.Windows.Forms.TextBox 上で発生する不具合について、お知らせします。

 

現象

System.Windows.Forms.TextBox コントロール上で、Alt キーとテンキーの 3 を同時に入力すると、例外 (System.OverflowException) が発生し、アプリケーションがクラッシュします。

数字キーの 3 との組み合わせでは発生しません。

Windows 7 で実行した場合は、以下のとおりです。

Windows7

 

 

原因

本現象は、.NET Framework 2.0 における不具合に起因します。

Alt キーとテンキーの 3 を押下した場合、.NET Framework 内部でメッセージ処理に不正が発生し、OverflowException エラーが発生します。

上記メッセージ処理の問題は、アプリケーションが、x86 で最適化されている場合は発生しません。

なお、本現象は、.NET Framework 4 以降のバージョンにて修正されています。

 

回避方法

1. NET Framework のバージョンを変更する。

ターゲット フレームワークを、.NET Framework 4 以降のバージョンに変更します。

 

2. ターゲット プラットフォームを指定する。

ターゲット プラットフォームを x86 に指定します。
ターゲット プラットフォームは、すべての種類の CPU か、特定の種類の CPU (x86、x64、または Itanium) に設定できます。
詳細は以下の技術情報をご参照ください。

  方法 : アプリケーションを特定の種類の CPU に最適化する
  <https://msdn.microsoft.com/ja-jp/library/vstudio/5b4eyb0k.aspx>

 

3. 低レベルのキーボード フックを利用する。

SetWindowsHookEx 関数に、WH_KEYBOARD_LL を指定し、低レベルのキーボード フックをインストールした上で、Alt キーとテンキーの 3 の押し下げを確認することで、必要に応じてキーを無効化します。
詳細につきましては、以下の技術資料をご参照ください。

  SetWindowsHookEx
  <https://msdn.microsoft.com/ja-jp/library/cc430103.aspx>

  キーボードフックを使用した Windows キーの無効化
  <https://msdn.microsoft.com/ja-jp/library/bb219746(VS.85).aspx#Disable_the_Windows_Key_with_a_Keyboard_Hook>