专栏首页跟着阿笨一起玩NETC# 文本框 TextChanged 延时触发

C# 文本框 TextChanged 延时触发

public partial class DelayTextBox : TextBox
    {
        #region private globals

        private System.Timers.Timer DelayTimer; // used for the delay
        private bool TimerElapsed = false; // if true OnTextChanged is fired.
        private bool KeysPressed = false; // makes event fire immediately if it wasn't a keypress
        
        
        #endregion

        #region object model

        // Delay property
        private int delayTime = 3000;

        public int DelayTime
        {
            get { return delayTime; }
            set { delayTime = value; }
        }
        
        #endregion

        #region ctor

        public DelayTextBox()
        {
            InitializeComponent();

            // Initialize Timer
            DelayTimer = new System.Timers.Timer(delayTime);
            DelayTimer.Elapsed += new ElapsedEventHandler(DelayTimer_Elapsed);
        }

        #endregion

        #region event handlers

        void DelayTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            // stop timer.
            DelayTimer.Enabled = false;

            // set timer elapsed to true, so the OnTextChange knows to fire
            TimerElapsed = true;

            // use invoke to get back on the UI thread.
            this.Invoke(new DelayOverHandler(DelayOver), null);
        }

        #endregion

        #region overrides

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (!DelayTimer.Enabled)
                DelayTimer.Enabled = true;
            else
            {
                DelayTimer.Enabled = false;
                DelayTimer.Enabled = true;
            }

            KeysPressed = true;
            base.OnKeyPress(e);
        }

        protected override void OnTextChanged(EventArgs e)
        {
            // if the timer elapsed or text was changed by something besides a keystroke
            // fire base.OnTextChanged
            if (TimerElapsed || !KeysPressed)
            {
                TimerElapsed = false;
                KeysPressed = false;
                base.OnTextChanged(e);
            }
        }

        #endregion

        #region delegates

        public delegate void DelayOverHandler();

        #endregion

        #region private helpers

        private void DelayOver()
        {
            OnTextChanged(new EventArgs());
        }

        #endregion

    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#/WinForm给控件加入hint文字

    以前在手机上(wp)上做过类似的效果。参考silverlight toolkit 的searchTextBox。现在要在winform下制作,开始我还以为应该有...

    跟着阿笨一起玩NET
  • 用于查询的日期类型转换帮助类

    本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html

    跟着阿笨一起玩NET
  • C# 常用日期类型转换帮助类

    本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html

    跟着阿笨一起玩NET
  • java中的6种单例写法

    我们优化上面的代码,遇到并发,很容易想到加锁,把获取对象的方法加上关键字synchronized,很巧,这种写法也称为懒汉式单例 ,如下:

    IT云清
  • android数据保存之greendao

    有时我们的数据属于保存到数据库,对于Android应用和IOS应用,我们一般都会使用SQLite这个嵌入式的数据库作为我们保存数据的工具。由于我们直接操作数据库...

    xiangzhihong
  • Java 单例模式 五种常见的写法

    大数据工程师-公子
  • Python 技术篇-容易被忽略的尾差问题

    java和python都存在着这样的问题,3*0.1不是等于0.3,而是等于0.30000000000000004。 换个思维,如果有这么一个判断,3*0.1...

    小蓝枣
  • 【腾讯 TMQ 】WIFI 安全测试,其实不难

    作为WiFi安全的一部分,近年来WiFi安全事件层出不穷,而其中的ARP攻击事件更加普遍,越来越成为移动互联网时代手机用户的一大痛点。本文主要讲解WIFI的安全...

    腾讯移动品质中心TMQ
  • 云应用:混合云需要混合网络来支撑

    在经过一番艰苦努力的之后,我最终调试解决了一个非常棘手的混合云网络问题。 虚拟私有云(VPC)提供了一个包含免费虚拟机(VM)使用时间的培训项目,学生可以跟随一...

    静一
  • 如何用python写一个安卓APP?(上)

    1 针对这个问题 我劝大伙儿谨慎尝试 谨慎尝试 为什么咧 我把大家骗进来的目的 就是让大家看看 什么叫做 好惨一男的 不过放心 你依然可以看到 这个问题的 可能...

    聪明的瓦肯人

扫码关注云+社区

领取腾讯云代金券