为什么我在文本框中输入一个字符后,就会触发文本框的TextChanged事件?

6
private void NameVal_TextChanged(object sender, EventArgs e)
    {
        String text = NameVal.Text;

    }

当我输入姓名的第一个字母时,该程序立即被执行。我该如何让程序等待,直到我输入完整个字符串(例如姓名:詹姆斯)?


这就是TextChanged应该工作的方式。你想等什么? - Steve
我想要等到我输入完整个字符串而不仅仅是一个字符。 - user1298925
2个回答

9

如果您想确定用户何时完成输入,可以捕获离开事件 - 当文本框失去焦点时触发此事件 - 即用户在文本框外单击:

private void NameVal_Leave(object sender, EventArgs e)
{
    //Do your stuff
    String text = NameVal.Text;
}

谢谢您的快速和正确的回复,我一直在寻找这个答案。我希望我知道如何在互联网上搜索才能得到答案。最终我不得不在 Stack Overflow 上发布问题。如果您有任何提示,将不胜感激。 - user1298925
不客气,@user1298925。这里有一篇很好的MSDN文章,解释了winform中事件的顺序 - 链接 - Daniel Flippance
我将此事件用作唯一触发器来检查文本是否为空,因为当文本框为空时,TextChanged事件不会被触发。我错了吗? - mkb

0
如果您正在使用VS2019,TextChanged事件和Focus Leave事件之间存在关联。您必须有一个TextChanged事件,然后在搜索事件并找到Focus时选择Leave,然后会出现一个下拉框,其中包含与Focus事件相同对象的TextChanged事件,您将选择它。这将在Form1定义区域中添加Leave事件,但不会像通常双击文本框时那样在Form1的代码区域生成代码。这部分代码需要您自己创建。这篇文章帮助我完成了这一部分。
当天晚些时候。 我弄错了。您不必选择TextChanged事件。那是当时下拉列表中唯一可用的事件。因为我删除了TextChanged事件并手动添加了Focus_Leave事件,所以我必须再次在form1定义区域中添加两个事件,然后重新进入form1.design文件添加TextChanged事件。我在这里进行实验。但是当我将它们都删除并重新输入事件时,在form1.design文件中有可能选择正确的事件。我还遇到了另一个错误,但现在它们又同步了。所有由MS VS在幕后生成的代码使得更改此区域变得困难。当然,他们确实告诉您不要更改它,但如果您犯了这样的错误,您不会重新开始,而是直接深入并继续学习他们是如何做到这一点的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接