Winfrom处理TextBox控件的输入事件防抖

工作中遇到了一个小需求,需要通过输入的内容筛选展示列表。为了避免在输入的过程中重复渲染界面,就需要做防抖处理,故在此记录下。

private Timer debounceTimer;
    private int debounceInterval = 500; // 防抖间隔时间,例如500毫秒

    public DebounceTextBox()
    {
        debounceTimer = new Timer(debounceInterval);
        debounceTimer.Elapsed += OnDebounceTimerElapsed;
        debounceTimer.AutoReset = false; // 设置为false,因为我们只希望它触发一次
        this.TextChanged += TextBox_TextChanged;
    }

    private void TextBox_TextChanged(object sender, EventArgs e)
    {
        debounceTimer.Stop(); // 停止计时器,如果正在运行的话
        debounceTimer.Start(); // 重新启动计时器
    }

    private void OnDebounceTimerElapsed(object sender, ElapsedEventArgs e)
    {
        if (this.InvokeRequired) // 确保在UI线程上调用处理程序
        {
            this.Invoke((MethodInvoker)delegate { HandleDebouncedTextChange(); });
        }
        else
        {
            HandleDebouncedTextChange();
        }
    }

    private void HandleDebouncedTextChange()
    {
        // 在这里处理文本改变的逻辑,例如更新UI或调用其他方法
        Console.WriteLine("文本改变: " + this.Text);
    }

 

posted @ 2025-11-27 15:32  Hi!宋先生  阅读(1)  评论(0)    收藏  举报