Как узнать, когда пользователь закончил печатать в текстовом поле формы окна C # - PullRequest
0 голосов
/ 23 марта 2012

Есть ли способ узнать, когда пользователь закончил печатать в текстовом поле формы C # windows?

Перефразировать: Есть ли способ узнать, когда пользователь перестает печатать на несколько секунд (может быть, 5 секунд) в текстовом поле формы C # windows?

Ответы [ 3 ]

5 голосов
/ 10 января 2013

Расширьте TextBox и создайте новое событие «TextChangedComplete», которое запускается при прослушивании события TextChanged и манипулировании таймером. Вот полный код.

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);
    }
}
0 голосов
/ 23 марта 2012

Вы можете использовать OnLostFocus, чтобы определить, когда фокус пользователя покидает текстовое поле.

В противном случае вы можете использовать OnKeyPress и таймер, чтобы указать, сколько времени прошло с момента последнего нажатия клавиши.

0 голосов
/ 23 марта 2012

Это нечеткая область, как отметили другие. Но лучший способ сделать это - просто набрать

  1. настраиваемое количество миллисекунд, указанное в качестве окна «Готово» (сколько секунд бездействия до тех пор, пока вы не сочтете, что они завершили набор)
  2. Отслеживание "key up" событий.
  3. Имейте таймер, который срабатывает через промежутки времени, пока ваше окно неактивности, и если в течение этого времени не было события KeyUp, вы можете считать, что ввод завершен
...