如何知道用户何时在C#窗体上输入文本框

时间:2012-03-23 18:30:46

标签: c# textbox windows-forms-designer

有没有办法知道用户何时在C#windows窗体文本框中输入?

重新整理: 有没有办法知道用户何时在C#windows窗体文本框上停止输入几秒钟(可能是5秒)?

3 个答案:

答案 0 :(得分:5)

扩展TextBox并创建一个新事件“TextChangedComplete”,它通过监听TextChanged事件和操作Timer来触发。这是完整的代码。

public class TextBox : System.Windows.Forms.TextBox
{
    private System.Timers.Timer timer;

    public TextBox()
    {
        this.timer = new System.Timers.Timer(1000);
        this.timer.Elapsed += timer_Elapsed;
    }

    public TimeSpan TextChangedCompleteDelay
    {
        get { return TimeSpan.FromMilliseconds(this.timer.Interval); }
        set { this.timer.Interval = value.TotalMilliseconds; }
    }

    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs args)
    {
        this.timer.Stop();
        this.BeginInvoke(new MethodInvoker(this.OnTextChangedComplete));
    }

    public event EventHandler<EventArgs> TextChangedComplete;

    protected void OnTextChangedComplete()
    {
        if (this.TextChangedComplete != null)
            this.TextChangedComplete(this, new EventArgs());
    }

    protected override void OnTextChanged(EventArgs args)
    {
        if (!this.timer.Enabled)
            this.timer.Start();
        else
        {
            this.timer.Stop();
            this.timer.Start();
        }

        base.OnTextChanged(args);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (this.timer != null)
                this.timer.Dispose();
        }

        base.Dispose(disposing);
    }
}

答案 1 :(得分:0)

这是一个模糊的领域,正如其他人所指出的那样。但我发现这样做的最好方法就是

  1. 指定为&#34; done&#34;的可配置的毫秒数。窗口(在你考虑完成输入之前,有多少秒不活动)
  2. 跟踪 "key up" 事件。
  3. 只要您的非活动窗口有一个定时器会按时间间隔触发,如果在此期间没有KeyUp事件,您可以考虑输入完成

答案 2 :(得分:0)

您可以使用OnLostFocus来判断用户的焦点何时离开文本框。

否则,您可以使用OnKeyPress和一个计时器来判断自上次击键后多长时间。