2016-04-14 5 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

Причина, по которой он всегда возвращает США, потому что вы находитесь внутри команды, и только для этой входной строки изменилась настройка.

Если пользователь меняет язык ввода во время отображения формы, текущий язык возвращается правильно. Но вы также можете программно установить с помощью другой кнопки:

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); 
     } 
    } 
}