文本框离开事件抑制按钮单击



我有一个简单的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();
    }

相关内容

  • 没有找到相关文章

最新更新