TextBox Leave Event suppresses Button Click

I have a simple Windows Form: 'Message' TextBox has Enter and Leave events to allow user to enter text in another language only on that field. 'Send' button sends the form content. After the user fills the Message and clicks Send, Textbox's Leave event prevent button's Click event from firing. I need both handlers to run.

Here's the relevant code:

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

The problem is now solved. The problem is caused by the change of input language. If the enter and leave handlers did other stuff then the click event will fire normally. Since I need to change the input language I solved it by monitoring the MouseDown, MouseClick and MouseUp events and generating a click if it was not automatically generated.


I've got same problem. When I changed the input language and then on leave event set it back to default one. When i click on other component it wont fire click event. I had to click twice then. I thing it has something to do with focus. I solved it by setting the focus back to form, after changing back the input language. Here is the handler:

void textBoxSearch_LostFocus(object sender, EventArgs e)
    {
        InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
        this.Focus();
    }

Hope it helps...

链接地址: http://www.djcxy.com/p/44934.html

上一篇: wpf鼠标捕获和焦点问题

下一篇: 文本框离开事件禁止按钮单击