[Tips][MaskedTextBox] 入力した文字が拒否された理由を知る

前回の記事で、MaskInputRejectedイベントを使用して入力した文字がマスクと一致しない場合にメッセージを出す方法を紹介しました。

本記事では、マスクに一致しなかった原因を理由を取得する方法について紹介します。

MaskInputRejectedイベントは、引数 e.RejectionHintを持っており、この値を調べることで、マスクと一致しなかった理由を知ることが出来ます。

e.RejectHintの値は下表に示すとおりです。

メンバ名 説明
AlphanumericCharacterExpected 操作が成功しませんでした。英数字以外の入力文字が見つかりました。
AsciiCharacterExpected 操作が成功しませんでした。ASCII 文字セットにはない入力文字が見つかりました。
CharacterEscaped 成功しました。リテラル文字、プロンプト文字、または空白文字がエスケープ文字であったため、操作が正常に行われました。
DigitExpected 操作が成功しませんでした。数字以外の入力文字が見つかりました。
InvalidInput 操作が成功しませんでした。無効な入力文字が見つかりました。
LetterExpected 操作が成功しませんでした。文字ではない入力文字が見つかりました。
NoEffect 成功しました。必要がなかったため主要な操作は実行されませんでした。したがって、副作用は発生しませんでした。
NonEditPosition 操作が成功しませんでした。書式設定された文字列内の現在の位置はリテラル文字です。
PositionOutOfRange 操作が成功しませんでした。指定した位置が対象の文字列の範囲外です。通常、これはゼロ未満の値か、対象の文字列の長さより大きい値です。
PromptCharNotAllowed 操作が成功しませんでした。入力時のプロンプト文字が有効ではありません。原因としては、AllowPromptAsInput プロパティが false に設定されていることが考えられます。
SideEffect 成功しました。必要がなかったため主要な操作は実行されませんでしたが、メソッドで副作用が発生しました。たとえば、RemoveAt メソッドは未割り当ての編集位置を削除できるため、書式設定された文字列で後続文字が左にシフトされます。
SignedDigitExpected 操作が成功しませんでした。符号付き数値以外の入力文字が見つかりました。
Success 成功しました。主要な操作が正常に行われました。
UnavailableEditPosition 操作が成功しませんでした。要求を実行するのに十分な編集位置がありませんでした。
Unknown 不明です。操作の結果を判断できませんでした。

下記は、入力しなかった文字がマスクと一致しなかった場合に、その理由を表示する例です。

VBの例

''' <summary>
''' フォームロード時の処理
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub Form10_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'マスクの設定(数値3桁)
    MaskedTextBox1.Mask = "000"
End Sub

''' <summary>
''' 入力された文字がマスクと一致しない場合
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub MaskedTextBox1_MaskInputRejected(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles MaskedTextBox1.MaskInputRejected
    Dim msg As String
    Select Case e.RejectionHint
        Case System.ComponentModel.MaskedTextResultHint.DigitExpected
            msg = "操作が成功しませんでした。" & vbCrLf & "数字以外の入力文字が見つかりました。"
        Case Else
            msg = "その他のエラーが発生しました。"
    End Select

    MessageBox.Show(msg)
End Sub

C#の例

/// <summary>
/// フォームロード時の処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form10_Load(object sender, EventArgs e)
{
    // マスクの設定(数値3桁)
    maskedTextBox1.Mask = "000";
}

/// <summary>
/// 入力された文字がマスクと一致しない場合
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
    string msg = "";

    switch (e.RejectionHint)
    {
        case MaskedTextResultHint.DigitExpected:
            msg = "操作が成功しませんでした。\r\n数字以外の入力文字が見つかりました。";
            break;
        default:
            msg = "その他のエラーが発生しました。";
            break;
    }

    MessageBox.Show(msg);
}

“[Tips][MaskedTextBox] 入力した文字が拒否された理由を知る” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です