ユーザコントロールにコントロールを配置してLeaveイベントハンドラでフォーカス移動を禁止すると、以後のテキスト入力ができなくなる。
対象製品
InputMan for .NET 4.0J Windows Forms Edition
発生環境
動作環境と同じ
状況
回避方法あり
詳細
この問題はEditコントロールで発生します。
ユーザコントロールにEditコントロールを配置し、このコントロールのLeaveイベントハンドラでこのコントロールのFocusイベントを呼び出してフォーカス移動を抑制する実装を行うと、フォーカス移動抑制後このコントロールに対するテキストの入力ができなくなることがあります。
ユーザコントロールに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();
}
}
以下の例は、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