WinForm app .NET 4.0 on a Win10 machine with Thai language installed. Three TextBoxes for Thai entry, three for English.
In this example, using English in a Thai TextBox (and, the reverse) is not possible ... unless the user switches the global language setting during text entry.
I strongly encourage you
not to block the user from leaving a TextBox if they have not entered anything, as is demonstrated in this code: that goes against Win UI guidelines, and will probably confuse some users.
using System;
using System.Windows.Forms;
using System.Globalization;
namespace MixedLanguageTbx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
InputLanguage Thai;
InputLanguage English;
private void Form1_Load(object sender, EventArgs e)
{
CultureInfo thaiLanguage = new CultureInfo("th");
Thai = InputLanguage.FromCulture(thaiLanguage);
CultureInfo englishLanguage = new CultureInfo("en");
English = InputLanguage.FromCulture(englishLanguage);
}
private TextBox currentTextBox;
private char currentChar;
private char backKey = (char)Keys.Back;
private void tbxDataEntry_KeyPress(object sender, KeyPressEventArgs e)
{
currentChar = e.KeyChar;
bool validChar =
char.IsLetter(currentChar)
||
char.IsDigit(currentChar)
||
currentChar == backKey;
if (!validChar)
{
if (!lblWarning.Visible)
{
lblWarning.Visible = true;
}
e.Handled = true;
}
else
{
if (lblWarning.Visible)
{
lblWarning.Visible = false;
}
}
}
private void ThaiTbxs_Enter(object sender, EventArgs e)
{
InputLanguage.CurrentInputLanguage = Thai;
}
private void EnglishTbxs_Enter(object sender, EventArgs e)
{
InputLanguage.CurrentInputLanguage = English;
}
private void AllTextBoxes_Leave(object sender, EventArgs e)
{
InputLanguage.CurrentInputLanguage = English;
currentTextBox = sender as TextBox;
if(currentTextBox.Text == "")
{
currentTextBox.Focus();
}
}
}
}