ユーザコントロールにコントロールを配置してLeaveイベントハンドラでフォーカス移動を禁止すると、以後のテキスト入力ができなくなる。

文書番号 : 25688     文書種別 : 不具合     最終更新日 : 2008/05/13
文書を印刷する
対象製品
InputMan for .NET 4.0J Windows Forms Edition
発生環境
動作環境と同じ
状況
回避方法あり
詳細
この問題はEditコントロールで発生します。
ユーザコントロールにEditコントロールを配置し、このコントロールのLeaveイベントハンドラでこのコントロールのFocusイベントを呼び出してフォーカス移動を抑制する実装を行うと、フォーカス移動抑制後このコントロールに対するテキストの入力ができなくなることがあります。
回避方法
Leaveイベントではなく、Validatingイベントを用いてフォーカス移動を抑制するようにします。
以下の例は、Validatingイベントを用いたフォーカス移動抑制機能の実装例を示しています。
[VB]
<LicenseProviderAttribute(GetType(LicenseProvider))> _
Public Class UserControl1

  ' 回避方法:こちらの実装では、フォーカス入力抑制後も
  ' テキスト入力が可能です。
  Private Sub Edit1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) _
  Handles Edit1.Validating

    e.Cancel = True

  End Sub

  ' こちらの実装では、フォーカス移動抑制後のテキスト入力が
  ' できなくなります。
  'Private Sub Edit1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  'Handles Edit1.Leave

  '  Edit1.Focus()

  'End Sub
End Class

[C#]
[ LicenseProviderAttribute( typeof( LicenseProvider ) ) ]
public partial class UserControl1 : UserControl
{
  // 回避方法:こちらの実装では、フォーカス入力抑制後も
  // テキスト入力が可能です。
  private void edit1_Validating( object sender, CancelEventArgs e )
  {
    e.Cancel = true;
  }

  // こちらの実装では、フォーカス移動抑制後のテキスト入力が
  // できなくなります。
  //private void edit1_Leave( object sender, EventArgs e )
  //{
  //  edit1.Focus();
  //}

  public UserControl1()
  {
    InitializeComponent();
  }
}
キーワード
INMN06788

この文書は、以前は次のバグレポートIDで公開されていました : 7485