2013-06-21 4 views
7

У меня есть приложение Winforms в C#, и я хочу, чтобы TextBox автоматически менял язык, когда он фокусируется.Как изменить язык TextBox автоматически

Я попробовал этот код:

private void textBox1_Enter(object sender, EventArgs e) 
{ 
    SetKeyboardLayout(GetInputLanguageByName("fa")); 
} 
private void textBox1_Leave(object sender, EventArgs e) 
{ 
    SetKeyboardLayout(GetInputLanguageByName("eng")); 
} 
public static InputLanguage GetInputLanguageByName(string inputName) 
{ 
    foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages) 
    { 
     if (lang.Culture.EnglishName.ToLower().StartsWith(inputName)) 
     { 
      return lang; 
     } 
    } 
    return null; 
} 
private void SetKeyboardLayout(InputLanguage layout) 
{ 
    InputLanguage.CurrentInputLanguage = layout; 
} 

Но когда я вхожу в TextBox, язык не меняется. Что я могу сделать?

+6

«Это не сработало» не является приемлемым способом описания проблемы. Пожалуйста, предоставьте более подробную информацию. –

+2

Когда я вхожу в текстовое поле, язык не изменяется. – amirhossein

+0

Тогда скажите так в своем вопросе, чтобы люди не читали комментарии, чтобы выяснить проблему. –

ответ

4

Вещи, чтобы проверить:

  1. Является ли "фа" установленный языком?
  2. Прикреплены ли textBox1_Enter и textBox1_Leave к событиям, отправленным textBox1?
  3. Запустили ли вы его через отладчик и вызывается GetInputLanguageByName и что правильный язык вызывается, когда фокус получен и потерян?
+1

ответ 1 есть да. «fa» - это установленный язык, но я больше всего использую «персидский», ответ 2 - нет, я не привязан к событиям, но я сделал это сейчас. это действительно сработало. Я благодарю вас за ваш ответ. – amirhossein

0

Попробуйте это ..

private void textBox1_Enter(object sender, EventArgs e) 
{ 
    SetKeyboardLayout("FA"); 
} 


private void SetKeyboardLayout(InputLanguage layout) 
{ 
foreach (InputLanguage Lng in InputLanguage.InstalledInputLanguages) 
{ 
    If (Lng.Culture.EnglishName.ToUpper.StartsWith(layout)) 
    { 
     InputLanguage.CurrentInputLanguage = Lng; 
    } 

} 

} 
Смежные вопросы