Определить десятичный разделитель
Мне нужно определить десятичный разделитель в текущей настройке окон. 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";
}
}
}
Ответы
Ответ 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
, проблема может быть здесь