C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 言語の切り替え


(過去ログ 166 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■95812 / inTopicNo.1)  言語の切り替え
  
□投稿者/ sck (1回)-(2020/09/28(Mon) 11:05:09)

分類:[.NET 全般] 

日本語 Windows10 にて、
設定→言語→優先する言語を追加する で
English(United States) を追加すると、
タスクバーの「JP」をクリックして、
「EN」へ切り替えられるようになります。

この切り替えを、VB.NET から行うにはどうすればいいでしょうか?

(IMEのオンオフや、MS-IMEの入力モード切替ではありません)

よろしくお願いいたします。




引用返信 編集キー/
■95813 / inTopicNo.2)  Re[1]: 言語の切り替え
□投稿者/ 魔界の仮面弁士 (2847回)-(2020/09/28(Mon) 11:59:23)
No95812 (sck さん) に返信
> この切り替えを、VB.NET から行うにはどうすればいいでしょうか?
投稿分類が VB.NET ではなく .NET 全般になっていたので、
一応、VB / C# 両方載せておきます。


Private Function ChangeInputLanguage(layoutName As String) As Boolean
  Dim languages = InputLanguage.InstalledInputLanguages.OfType(Of InputLanguage)()
  Dim language = languages.FirstOrDefault(Function(c) c.LayoutName = layoutName)
  If language IsNot Nothing Then
    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(language.Culture)
    Return True
  Else
    Return False
  End If
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
  ChangeInputLanguage("US")
End Sub



private void button1_Click(object sender, EventArgs e)
{
  ChangeInputLanguage(1033);
}
private void button2_Click(object sender, EventArgs e)
{
  ChangeInputLanguage(1041);
}

private bool ChangeInputLanguage(int lcid)
{
  var culture = InputLanguage.InstalledInputLanguages.OfType<InputLanguage>()
    .FirstOrDefault(x => x.Culture?.LCID == lcid)?.Culture;
  if (culture == null)
  {
    return false;
  }
  else
  {
    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(culture);
    return true;
  }
}



引用返信 編集キー/
■95814 / inTopicNo.3)  Re[1]: 言語の切り替え
□投稿者/ sck (2回)-(2020/09/28(Mon) 13:17:47)
No95812 (sck さん) に返信

ご回答ありがとうございました。
(投稿分類間違い、市連れしました)

ただし、いただいたソースでは切り替えはできませんでした。
変数の中身を見ながらステップ実行してみると、
languages には確かに ja-JP と en-US が入ってますが、
2回繰り返される (Function(c) c.LayoutName = layoutName) では
c.LayoutName は2回とも 日本語 となっており、
ChangeInputLanguage は False を返していました。

LINQの書き方がよくわかっていないので理由はよくわかりませんが、
とりあえず、下記にて切り替えできるようになりました。

    Private Function ChangeInputLanguage(layoutName As String) As Boolean
        For Each lang As InputLanguage In InputLanguage.InstalledInputLanguages
            If lang.Culture.Name = layoutName Then
                InputLanguage.CurrentInputLanguage = lang
                Return True
            End If
        Next
        Return False
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ChangeInputLanguage("en-US")
    End Sub


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -