当前位置:  开发笔记 > 后端 > 正文

.NET ---文本框控件 - 等到用户完成输入

如何解决《.NET---文本框控件-等到用户完成输入》经验,为你挑选了2个好方法。

问候所有,

是否有内置的方法来了解用户何时输入文本框?(在点击标签之前,或者移动鼠标)我有一个在textchanged事件上发生的数据库查询,一切都很完美.但是,我注意到当然存在一些延迟,因为如果用户正在快速键入文本框,则程序正忙于对每个字符进行查询.所以我希望的是一种查看用户是否已完成输入的方法.因此,如果他们键入"a"并停止,则会触发事件.但是,如果他们输入"一直",则事件在y键盘之后触发.

我脑子里浮现出一些想法,但我确信它们不是最有效的.就像测量自上次textchange事件以来的时间一样,如果它超过某个值,那么它将继续运行我的其余程序.

让我知道你的想法.

语言:VB.NET Framework:.Net 2.0

- 编写澄清"完成打字"



1> Daniel LeChe..:

一种方法:

    创建一个Timer带有IntervalX毫秒

    间隔应约为300ms; 击键之间的正常时间,以及在完成和更新之间等待的合理时间

    在输入的TextChanged事件中,Stop()然后Start()Timer

    这将重新启动Timer,如果它已经在运行,所以如果用户一直以正常速度打字,每一次变化都会重启定时器.

    在计时器的Tick事件,Stop()Timer做长事务

    可选:处理LeaveKeyDown事件,以便离开控制或按EnterStop()Timer,做长事务.

如果文本已更改,则会导致更新,并且用户未在X毫秒内进行任何更改.

您正在考虑的"测量自上次更新以来的时间"方法的一个问题是,如果快速进行最后一次更改,则不会发生更新,并且不会有任何后续更改来触发另一次检查.

注意:TextBox es和Timers 之间必须有一对一的配对; 如果您计划使用多个输入执行此操作,我会考虑构建一个UserControl包含此功能的程序.



2> 小智..:

对于那些在.NET 2.0中需要这样的东西的人来说,我在这里制作了一个源自TextBox并使用相同方法的Control ..希望这个帮助

public partial class TextBox : System.Windows.Forms.TextBox
{

    private ManualResetEvent _delayMSE;
    public event EventHandler OnUserStopTyping;
    private delegate bool TestTimeout();

    public TextBox()
    {
        _delayMSE = new ManualResetEvent(false);
        this.TextChanged += new EventHandler(TextBox_TextChanged);
    }

    void TextBox_TextChanged(object sender, EventArgs e)
    {


        _delayMSE.Set();
        Thread.Sleep(20);
        _delayMSE.Reset();

        TestTimeout tester = new TestTimeout(TBDelay);
        tester.BeginInvoke(new AsyncCallback(Test), tester);

    }


    private void Test(IAsyncResult pResult)
    { 
        bool timedOut = (bool)((TestTimeout)pResult.AsyncState).EndInvoke(pResult);
        if (timedOut)
        {
            if (OnUserStopTyping != null)
                OnUserStopTyping(this, null);
        }
    }

    private bool TBDelay()
    { 
        return !_delayMSE.WaitOne(500, false); 
    }

}

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有