0

我有一个简单的 Windows 窗体:“消息”文本框具有 Enter 和 Leave 事件,允许用户仅在该字段上输入另一种语言的文本。“发送”按钮发送表单内容。用户填写 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);
        }
    }
}
4

2 回答 2

0

现在问题已经解决了。该问题是由输入语言的变化引起的。如果进入和离开处理程序做了其他事情,那么点击事件将正常触发。由于我需要更改输入语言,因此我通过监视 MouseDown、MouseClick 和 MouseUp 事件并在未自动生成时生成单击来解决它。

于 2013-04-11T16:31:38.533 回答
0

我有同样的问题。当我更改输入语言然后在离开事件时将其设置回默认语言。当我单击其他组件时,它不会触发单击事件。我不得不点击两次。我认为这与专注有关。在更改输入语言后,我通过将焦点设置回表单来解决它。这是处理程序:

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

希望能帮助到你...

于 2014-05-21T12:25:48.017 回答