专栏首页跟着阿笨一起玩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 条评论
登录 后参与评论

相关文章

  • Android: couldn't save which view has focus because the focused view ### has no id

    Android: couldn't save which view has focus because the focused view ### has no ...

    阳光岛主
  • 18.6.13日报,提示CoInitialize未调用的解决方法

    1,完善electron的拖拽。里面细节较多,和wke模式不同的是需要处理多线程逻辑。

    龙泉寺扫地僧
  • Android 内存分析工具

    Dalvik 虚拟机支持垃圾收集,但是这不意味着你可以不用关心内存管理。你应该格外注意移动设备的内存使用,手机和平板的内存空间是受到限制的。

    阳光岛主
  • 18.6.16日报

    2,修复vscode不能加载新窗口的问题。主要是 script环境创建的太早,是在收到某个ipc消息就创建了。而

    龙泉寺扫地僧
  • 18.6.6日报,layer太多造成卡慢

    1,跟进http://www.zhangxinxu.com/study/201005/css3-solar-system.html卡慢问题。

    龙泉寺扫地僧
  • JVM学习笔记——垃圾收集器与内存分配策略(1)

    上一篇文章介绍了java运行时内存的各个区域,其中虚拟机栈,程序计数器,本地方法栈三个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出有条不紊的执行着...

    用户1665735
  • 18.6.10日报

    1,把electron的消息、线程模式全改成自己实现,不依赖windows。然后搞定了之前的多年老bug。以前经常死锁,卡死。

    龙泉寺扫地僧
  • 18.6.12日报

    1,http://vip.58ganji.com/house/publish/ershou/?chooseWeb%5B%5D=2

    龙泉寺扫地僧
  • Java 之 Array 数组

    Java反射技术除了可以在运行时动态地决定要创建什么类型的对象,访问哪些成员变量,方法,还可以动态地创建各种不同类型,不同维度...

    阳光岛主
  • Java 之 String 类型

    因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。

    阳光岛主

扫码关注云+社区

领取腾讯云代金券