テキストコントロールで文字が入力できなくなる
対象製品
InputMan for .NET 4.0J Windows Forms Edition
発生環境
動作環境と同じ
状況
回避方法あり
詳細
この問題はEditコントロールで発生します。
以下の条件が満たされたとき、Edit1に対してテキストを入力することができなくなります。
1.フォームに2つのEditコントロールを張り付ける(Edit1, Edit2)。
2.Edit1のValidatingイベントで、Edit2.EnableプロパティをFalseに設定する実装を行う。
3.アプリケーションを起動し、Edit1にフォーカスがある状態でTabキーを押す。(フォーカスがEdit2に移ろうとするが、Edit2は無効になるのでフォーカスは再びEdit1に戻される。)
この問題はEditコントロールの基底クラスであるSystem.Windows.Forms.Controlクラスが、この手順で操作を行った場合にEnterイベントを発生しないことが原因で発生します。
以下の条件が満たされたとき、Edit1に対してテキストを入力することができなくなります。
1.フォームに2つのEditコントロールを張り付ける(Edit1, Edit2)。
2.Edit1のValidatingイベントで、Edit2.EnableプロパティをFalseに設定する実装を行う。
3.アプリケーションを起動し、Edit1にフォーカスがある状態でTabキーを押す。(フォーカスがEdit2に移ろうとするが、Edit2は無効になるのでフォーカスは再びEdit1に戻される。)
この問題はEditコントロールの基底クラスであるSystem.Windows.Forms.Controlクラスが、この手順で操作を行った場合にEnterイベントを発生しないことが原因で発生します。
回避方法
次のコード例にあるように、Edit2コントロールのEnabledChangedイベントをハンドルし、このハンドラでフォーカス移動を明示的に行うことでこの問題を回避することができます。
[Visual Basic]
Private Sub Edit2_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Edit2.EnabledChanged
If Edit2.Enabled = False Then
Me.Focus()
Me.Edit1.Focus()
End If
End Sub
[C#]
private void Edit2_EnabledChanged( object sender, System.EventArgs e )
{
if( Edit2.Enabled == false )
{
this.Focus();
Edit2.Focus();
}
}
[Visual Basic]
Private Sub Edit2_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Edit2.EnabledChanged
If Edit2.Enabled = False Then
Me.Focus()
Me.Edit1.Focus()
End If
End Sub
[C#]
private void Edit2_EnabledChanged( object sender, System.EventArgs e )
{
if( Edit2.Enabled == false )
{
this.Focus();
Edit2.Focus();
}
}
キーワード
INMN06424
この文書は、以前は次のバグレポートIDで公開されていました : 7181