【问题标题】:Why my textbox TextChanged event gets fired after I enter "only" one character in my text box?为什么我在文本框中输入“仅”一个字符后会触发文本框 TextChanged 事件?
【发布时间】:2019-09-09 13:27:32
【问题描述】:
private void NameVal_TextChanged(object sender, EventArgs e)
    {
        String text = NameVal.Text;

    }

只要我输入我名字的第一个字母,这个程序就会被执行。如何让程序等到我完成输入字段的整个字符串(例如 Name ex: James)。

【问题讨论】:

  • 这就是 TextChanged 的​​工作方式。你还想等什么?
  • 我想等到我完成输入一个字符串而不仅仅是一个字符

标签: winforms textbox user-input textchanged


【解决方案1】:

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

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

【讨论】:

  • 感谢您快速正确的回复,我一直在寻找这个答案。我希望我知道我在 Internet 上的搜索如何得到答案。最后我不得不发布到SO。任何提示将不胜感激
  • 不客气@user1298925 MSDN上有一篇很好的文章解释了winform中的事件顺序-link
  • 我使用此事件作为检查文本是否为空的唯一触发器,因为文本框为空时不会触发 TextChanged 事件。我错了吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多