投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/10/19 20:15:05
> その他、My.Application.ChangeCulture("")を行うことで、
> どのような影響が出てくるでしょうか?
たとえば、日付書式なら、gg や MMMM や t などに影響を与えます。
数値書式なら、Double.PositiveInfinity.ToString() なども変わりますね。


> dec1 = "10.2"
> のように全角数字文字列を与えると例外が発生します。
これを許可したいなら、 "ja-JP" のカルチャのままにした方が良いでしょう。
String.Format や ToString や TryParse の際にカルチャを明示することで、
文字列への/文字列からの変換を現在のカルチャに依存させることなく
開発者が定めた特定のカルチャに基づいて行わせることができます。


TextBox1.Text = String.Format(CultureInfo.InvariantCulture, "{0:ggg yyyy/MM/dd HH:mm:ss.fffffff}", Now)



なお、使用可能なカルチャの一覧は、CultureInfo.GetCultures メソッドで得られます。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ComboBox1.DataSource = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures)
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    ListBox1.Items.Clear()
    Dim ci = TryCast(ComboBox1.SelectedItem, System.Globalization.CultureInfo)
    If ci Is Nothing Then
        Return
    Else
        System.Threading.Thread.CurrentThread.CurrentCulture = ci
    End If

    TextBox1.Text = Now.ToString("G")
    TextBox2.Text = 1234.5678D.ToString("G")

    ListBox1.Items.Add($"Name = {ci.Name}")
    ListBox1.Items.Add($"EnglishName = {ci.EnglishName}")
    ListBox1.Items.Add($"NativeName = {ci.NativeName}")
    ListBox1.Items.Add($"DisplayName = {ci.DisplayName}")
    ListBox1.Items.Add($"IetfLanguageTag = {ci.IetfLanguageTag}")
    ListBox1.Items.Add($"TwoLetterISOLanguageName = {ci.TwoLetterISOLanguageName}")
    ListBox1.Items.Add($"ThreeLetterISOLanguageName = {ci.ThreeLetterISOLanguageName}")
    ListBox1.Items.Add($"ThreeLetterWindowsLanguageName = {ci.ThreeLetterWindowsLanguageName}")
    ListBox1.Items.Add($"LCID = {ci.LCID}")
End Sub


各カルチャの Name が、My.Application.ChangeCulture に渡せる文字列となりますが、
先の例のように、細かい制御ができないなどの理由から、「CurrentCulture を指定」するか
「変換時にカルチャを明示する」方が確実かもしれません。(自分は後者を使うことが多い)