Подтвердить что ты не робот

Определить десятичный разделитель

Мне нужно определить десятичный разделитель в текущей настройке окон. Im используя визуальную студию 2010, форму окна. В частности, если DecimalSeparator является запятой, если пользователь вводит точку в текстовом поле 1, мне нужно показать нуль в текстовом поле2.

Я пробовал этот код, но не работал:

private void tbxDaConvertire_KeyPress(object sender, KeyPressEventArgs e)
    {
        string uiSep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
        if (uiSep.Equals(","))
        {
            while (e.KeyChar == (char)46)
            {
                tbxConvertito.Text = "0";
            }
        } 
    }

Я тоже попробовал этот код, но не работал:

private void tbxDaConvertire_KeyPress(object sender, KeyPressEventArgs e)
    {
        string uiSep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
        if (uiSep.Equals(","))
        {
            if (e.KeyChar == (char)46)
            {
                tbxConvertito.Text = "0";
            }
        } 
    }
4b9b3361

Ответ 1

Вот как это сделать:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        char a = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        if (e.KeyChar == a)
        {
            e.Handled = true;
            textBox1.Text = "0";
        }
    }

Надеюсь, что это поможет. Таким образом, когда вы нажмете "." или "," у вас будет ваше текстовое поле в 0

EDIT:

Если вы хотите вставлять 0 каждый раз, когда вы нажимаете десятичный разделитель, это код:

char a = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        if (e.KeyChar == a)
        {
            e.KeyChar = '0';
        }

Ответ 2

На самом деле вы должны использовать

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator

вместо

CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

Использование второго варианта дает вам настройки по умолчанию ОС, которые могут отличаться от пользовательских региональных локалей для конкретной учетной записи пользователя, зарегистрированной на этом ПК.

Ответ 3

Вы не должны использовать цикл while, я думаю, что он заморозит приложение, вместо этого используйте if, проблема может быть здесь