ラッパーコントロールにフォーカスが設定されると、キーボードから入力ができなくなる場合がある

文書番号 : 40994     文書種別 : 使用方法     登録日 : 2017/08/25     最終更新日 : 2017/08/25
文書を印刷する
対象製品
InputMan for Windows Forms 10.0J
詳細
コントロールの一部のイベントの処理で、下記のラッパーコントロールのFocusメソッド(またはSelectメソッド)を使用してフォーカス制御を行うと、フォーカスを取得時にこれらのラッパーコントロールのキー入力ができなくなる場合があります。

  • ラッパーマスクコントロール(Mask)
  • ラッパー数値コントロール(Number)
  • ラッパー日付コントロール(Date)
  • ラッパータイムスパンコントロール(TimeSpan)
  • ラッパー郵便コントロール(Postal)

  • この現象はラッパーコントロールの内部構造に起因して発生するため、上記のラッパーコントロールの制限事項となります。

    再現例
    ラッパーテキストコントロールのEnterイベントで、ラッパー数値コントロールにフォーカスを移動するような処理を行うと、ラッパー数値コントロールにキー入力ができなくなります。

    [Visual Basic]
    Private Sub Edit1_Enter(sender As Object, e As EventArgs) Handles Edit1.Enter
        Number1.Focus()
    End Sub
    [C#]
    private void edit1_Enter(object sender, EventArgs e)
    {
        number1.Focus();
    }

    回避方法
    フォーカスを設定する処理を、以下のように非同期的に実行することで、この現象を回避できます

    [Visual Basic]
    Private Sub Edit1_Enter(sender As Object, e As EventArgs) Handles Edit1.Enter
        ' フォーカス移動処理を非同期で実行します
        BeginInvoke(New MethodInvoker(AddressOf FocusNumber))
    End Sub
    
    Private Sub FocusNumber()
        Number1.Focus()
    End Sub
    [C#]
    private void edit1_Enter(object sender, EventArgs e)
    {
        BeginInvoke(new MethodInvoker(FocusNumber));
    }
    
    void FocusNumber()
    {
        number1.Select();
    }

    関連情報