我有一个带有一些组合框的Winforms c#表单,取消和保存按钮可以正常工作。 我现在需要在用户将文本输入到comboBox中时捕获。 我将一个空的(现在)lostFocus(或Leave)事件添加到combbox中,触发器很好。但是,如果该事件的原因是取消或保存按钮按下,则不再触发相应的事件。如果在其他时间按下这些按钮仍然可以正常工作。
这两个事件是否应按顺序触发,还是有更好的方法来捕获已完成的文本输入?
答案 0 :(得分:0)
Leave
和/或LoseFocus
事件未被触发,因为您没有离开组合框,因为当您按Enter
或{{{{}}}时它不会失去焦点1}}。
因此,最好的方法是添加您在Escape
事件中触发的功能,以及LoseFocus
和Button
的{{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);
}