丢失焦点事件后按钮单击事件不会触发

时间:2015-03-13 11:37:36

标签: c# winforms

我有一个带有一些组合框的Winforms c#表单,取消和保存按钮可以正常工作。 我现在需要在用户将文本输入到comboBox中时捕获。 我将一个空的(现在)lostFocus(或Leave)事件添加到combbox中,触发器很好。但是,如果该事件的原因是取消或保存按钮按下,则不再触发相应的事件。如果在其他时间按下这些按钮仍然可以正常工作。

这两个事件是否应按顺序触发,还是有更好的方法来捕获已完成的文本输入?

2 个答案:

答案 0 :(得分:0)

Leave和/或LoseFocus事件未被触发,因为您没有离开组合框,因为当您按Enter或{{{{}}}时它不会失去焦点1}}。

因此,最好的方法是添加您在Escape事件中触发的功能,以及LoseFocusButton的{​​{1}}点击事件。< / p>

添加对离开事件本身的调用:Cancel-将是最简单的方法。

为了确保只调用一次该函数,我会检查谁在Accept-Buttons事件中关注焦点:

comboBox1.Leave(null, null);

我也传递了ButtonClick,因此您可以查看private void acceptButton_Click(object sender, EventArgs e) { if (comboBox1.ContainsFocus) comboBox1_Leave(acceptButton, null); // do accept stuff here.. } private void cancelButton_Click(object sender, EventArgs e) { if (comboBox1.ContainsFocus) comboBox1_Leave(cancelButton, null); // do cancel stuff here.. } private void comboBox1_Leave(object sender, EventArgs e) { // do leave stuff here.. Console.WriteLine(sender); } 以查看Button是如何触发的。

答案 1 :(得分:0)

我在这里回答我自己的问题,因为我觉得这对其他新手可能有用。

我在空的lostFocus事件中设置的断点是停止发生按钮点击事件。当我删除断点时,问题就消失了。

然而,当我向lostFocus事件添加代码时,表单重绘有时会移动按钮并阻止其事件被触发。为了解决这个问题,我调整了TaWs非常有用的答案并从lostFocus事件中解除了按钮事件。

private void comboBox1_LostFocus(object sender, EventArgs e)
{
    bool saving = btnSave.ContainsFocus;

    // form redraw stuff here..
    if (saving)
         btnSave_Click(btnSave, null);
}
相关问题