3

私の WPF プロジェクトでは、ユーザビリティ テストにより、ユーザーが数値入力テキスト ボックスに小数点としてドットまたはコンマを入力できることが示されています。

それをクリーンアップするために、コンマをドットに、またはドットをコンマに置き換えるコンバーターを作成しました。これは機能しますが、カルチャが置き換えられるセパレーターを使用している場合に限ります。

ConvertBackこれは私のコンバーターのメソッド内にあるコードです:

return System.Convert.ToDouble(((string)value).Replace(',', '.');

これを見ると目が痛くなります。これは明らかなハッキングであり、多くのエラーを引き起こしているためです。コンマを置き換える必要がある場合もあれば、ドットを置き換える必要がある場合もあります。ソフトウェアに実際のローカリゼーションを実装しようとしています。

「きちんとしたローカリゼーション インフラストラクチャを損なうことなく、ユーザーがコンマまたはドットのいずれかを使用できるようにする適切な方法は何でしょうか?」

4

1 に答える 1

1

Stewbob からの非常に賢明な提案に従っていくつかの調査を行った結果、ユーザーが現在のカルチャの小数点記号のみを入力できるようにすることにしました。そのためにPreviewTextInput、コード ビハインドでリッスンします。

その結果、ユーザーは数字のみを入力し、次に現在の小数点記号を 1 回入力してから、さらに数字を入力できます。他のキャラクターは単に「応答しない」だけです。これは使い勝手の点でかなり良いと思います。

    private void PreviewNumberInput(object sender,
                                    System.Windows.Input.TextCompositionEventArgs e) {

        string input = ((TextBox)sender).Text + e.Text;

        string pattern = "^[0-9]+[" +
                          Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator +
                          "]?([0-9]+)?$";

        Regex regex = new Regex(pattern);
        e.Handled = !regex.IsMatch(input);
    }
于 2013-10-25T18:21:42.547 に答える