0

私は自分のプログラムの互換性を高めようとしています。そのために、たとえば、

textBox.Text = Convert.ToString(value)の代わりに使用= "value"

現在のユーザーの小数点記号を取得し、それreplacetryparse

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" か?

4

1 に答える 1

1

OK、テキストボックスに「2,5」の値がありますが、小数点としてドットを使用します

丁度。

float.TryParseCurrentCulture何も使用しない場合、メソッドは設定を使用しますIFormatProvider

"2,5"なしで floatに解析しようとする場合は、 として持つ必要がありIFormatProviderます。CurrentCulture,NumberDecimalSeparator

フロートに解析しようとすると"2.5"、カルチャを既に持っている別のパラメーターとして使用します。としてNumberDecimalSeparator(のようにInvariantCulture)、または(あなたが.Clone()したように)そのプロパティをにCurrentCulture設定し、この複製されたカルチャをoverloadの別のパラメータとして使用することができます。NumberDecimalSeparator.float.TryParse

于 2015-04-05T19:12:11.373 に答える