我有一个简单的Windows窗体:'消息'文本框有进入和离开事件,允许用户仅在该字段上输入另一种语言的文本。"发送"按钮发送表单内容。在用户填写了Message并单击Send之后,Textbox的Leave事件阻止按钮的Click事件触发。我需要两个处理程序都运行。
相关代码如下:
private void Message_Enter(object sender, EventArgs e)
{
inputLang = InputLanguage.CurrentInputLanguage;
foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
{
if (lang.LayoutName == "United States-International")
{
InputLanguage.CurrentInputLanguage = lang;
break;
}
}
}
private void Message_Leave(object sender, EventArgs e)
{
InputLanguage.CurrentInputLanguage = inputLang;
}
private void Send_Click(object sender, EventArgs e)
{
string dest = ServerList.Text;
string msg = Message.Text;
if (dest.Length == 0 || msg.Length == 0 )
{
Log("Fill the destination server and the message");
return;
}
if (context.SendMessage(dest, msg))
{
if (!ServerList.Items.Contains(dest))
{
ServerList.Items.Add(dest);
}
}
else
{
if (ServerList.Items.Contains(dest))
{
ServerList.Items.Remove(dest);
}
}
}
问题解决了。这个问题是由于输入语言的改变引起的。如果enter和leave处理程序执行了其他操作,则click事件将正常触发。因为我需要更改输入语言,所以我通过监视MouseDown, MouseClick和MouseUp事件来解决这个问题,如果它不是自动生成的,则生成单击。
我也有同样的问题。当我改变输入语言,然后在离开事件设置回默认的。当我点击其他组件时,它不会触发点击事件。我不得不点击两次。我觉得这和专注力有关。在更改输入语言后,我通过将焦点设置回形式来解决这个问题。下面是处理程序:
void textBoxSearch_LostFocus(object sender, EventArgs e)
{
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
this.Focus();
}