为什么我的textBox_enter活动(聚焦)在这里被调用了两次
本文关键字:调用 两次 在这里 聚焦 textBox 我的 enter 活动 为什么 | 更新日期: 2023-09-27 18:25:58
this.textBox1.Enter += new System.EventHandler(this.textBox1_Enter);
(...)
int test = 0;
private void textBox1_Enter(object sender, EventArgs e)
{
///
/// update completion from db
///
++test;
Log("got focus " + test);
}
我从我的日志语句中得到这个结果:
[03/08/2013 13:56:40]:获得焦点 1
[03/08/2013 13:56:40]:获得焦点 2
为什么每次在文本框中单击时都会调用两次此函数?
我已经检查过:我只有一个对这个函数的引用。
编辑:
实际函数看起来更像
private void textBox1_Enter(object sender, EventArgs e)
{
// update completion
List<string> allValues = getValuesFromDb();
myAutoComplete = new AutoCompleteStringCollection();
myAutoComplete.AddRange(allValues.ToArray());
textBox1.AutoCompleteCustomSource = myAutoComplete; /// this line calls enter event again
++test;
Log("got focus " + test);
}
问题解决了,我知道为什么。
textBox1.AutoCompleteCustomSource = myCustomSource;
再次调用 Enter 事件。
那么现在如何预防呢?
1((不起作用(第一个解决方案:将以下代码段移动到其他地方
textBox1.AutoCompleteCustomSource =...
不好:自动完成未更新
2((工作(把锁作为
int test = 0;
bool lockEnter = false;
private void textBox1_Enter(object sender, EventArgs e)
{
if (!lockEnter)
{
lockEnter = true;
// update completion
List<string> allValues = getValuesFromDb();
myAutoComplete = new AutoCompleteStringCollection();
mtAutoComplete.AddRange(allValues.ToArray());
textBox1.AutoCompleteCustomSource = myAutoComplete;
++test;
Log("update completion " + test);
lockEnter = false;
}
}
给出结果除外。
谢谢你们!