Я пытаюсь сделать свою программу более совместимой, для этого я, в конечном итоге, меняю много мелочей, например,Обработка десятичных разделителей (запятая и точка) для целой программы с несколькими строками кода
Использование textBox.Text = Convert.ToString(value)
вместо = "value"
Получение текущего пользователя десятичного разделителя и использовать его replace
на tryparse
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
float.TryParse(str.Replace(",", sepdec.ToString()).Replace(".", sepdec.ToString()), out testvariable;
Но эти решения трудно реализовать, если у вас есть уже треска большинство вашей программы, не беспокоясь об этом.
Так что я пытаюсь найти способы, чтобы сделать весь код совместимым, без необходимости редактировать каждый tryparse
и каждый textbox
я попытался сделать следующее:
//Get the current user decimal separator before the program initializes
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
//Create a current culture clone and change the separator to whatever the user has in his regional options, before the initializing the component
public Form1()
{
System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
customCulture.NumberFormat.NumberDecimalSeparator = sepdec.ToString();
System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
InitializeComponent();
}
Но я «Я проверил это, и он ничего не делает. Разве не предполагалось, что программа понимает что-то вроде ok, now you use dot as your decimal separator altough you have values in textBox as "2,5"
?
Я думаю, что не правильно объяснил, потому что он не работает. Когда я говорю «ОК», теперь вы используете точку в качестве разделителя десятичных чисел, хотя у вас есть значения в текстовом поле как «2,5». «Я имею в виду, что теперь вы будете обрабатывать« 2,5 »как« 2,5 »(с точкой) , и попробуйте его правильно ». – ng80092b
Кроме того, я могу ошибаться, но это может быть проблемой. Когда я говорю 'System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;' Не должен ли каждый 'tryparse' в коде использовать эту обычную культуру? Потому что, если мне нужно использовать 'currentculture' в качестве аргумента, это победит цель избежать редактирования каждого' tryparse' – ng80092b
@ ng80092b № Культура _can't_ рассматривать '2,5' как' 2.5' или наоборот. Поплавок может иметь различное представление в виде строки, основанной на настройках культуры. Это то же самое, что и при попытке разбора строки для float. Строка должна содержать точные разделители, используемые в текущей культуре для синтаксического анализа. –