为什么我的textBox_enter活动(聚焦)在这里被调用了两次


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

}

给出结果除外。

谢谢你们!

相关内容

最新更新