2016-04-14 21 views
1

にアクセスしたときCurrentInputLanguageプロパティが更新されない、より良い私の言い正確に理解するために、次のコードを見てください:右の言語を変更した後

using System; 
using System.Windows.Forms; 

namespace CurrentInputLanguageTest 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); // It's US 
      Console.ReadLine(); // Changed my keyboard layout while typing something 
      Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); // It's still US 

      var form = new Form(); 
      var button = new Button(); 
      button.Click += CheckInputLanguage; 
      form.Controls.Add(button); 
      Application.Run(form); 
     } 

     static void CheckInputLanguage(object sender, EventArgs e) 
     { 
      // I have changed my input language while the form is opened and pressed the button. 
      // It changes when called in this event handler. 
      Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); 
     } 
    } 
} 

問題:私は私のアプリでは、いくつかのイベントハンドラを持っていると私イベントが発生したときに現在の入力言語が何であるかを知る必要があります。これどうやってするの?

答えて

0

あなたがコマンドの中にあってその入力行だけのために常にUSを返す理由は、設定が変更されたためです。

フォームが表示されている間にユーザーが入力言語を変更すると、現在の言語が正しく返されます。しかし、別のボタンを使ってプログラムで設定することもできます:

using System; 
using System.Windows.Forms; 

namespace CurrentInputLanguageTest 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); // It's US 
      Console.ReadLine(); // Changed my keyboard layout while typing something 
      Console.WriteLine(Application.CurrentInputLanguage.LayoutName); // It's still US 

      var form = new Form(); 
      var grid = new TableLayoutPanel(); 
      var button = new Button(); 
      var button2 = new Button(); 
      button2.Left = button.Right + 5; 
      form.Refresh(); 
      button.Click += CheckInputLanguage; 
      button2.Click += ChangeInputLanguage; 
      form.Controls.Add(button); 
      form.Controls.Add(button2); 
      Application.Run(form); 
     } 

     private static void ChangeInputLanguage(object sender, EventArgs e) 
     { 
      InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo("en-US")); 
     } 

     static void CheckInputLanguage(object sender, EventArgs e) 
     { 
      // I have changed my input language while the form is opened and pressed the button. 
      // It changes when called in this event handler. 
      Console.WriteLine(InputLanguage.CurrentInputLanguage.LayoutName); 
     } 
    } 
} 
関連する問題