2012-03-23 4 views
0

ユーザーがいつC#windowsフォームでテキストボックスを入力したかを知る方法はありますか?ユーザーがいつC#windowsで入力を完了したかを知る方法textbox

Rephrase: C#ウィンドウでユーザーが数秒間(多分5秒間)タイピングをやめるのを知る方法はありますか?

+5

「完了した入力」を定義します。書き込みを止めたり、テキストボックスがフォーカスを失ったりしますか? –

+0

何をしたいですか?おそらくkeydownイベントなどで入力を確認してください。 – rene

+1

ESPしかし、私はそれが存在するかどうかはわかりません。 ...まだこれが完了するのを知るのを待っているので、私は自分でenterを押すでしょう。 –

答えて

0

完全なタイピングを考慮することができますユーザーのフォーカスがテキストボックスを離れるとき。

それ以外の場合は、OnKeyPressとタイマーを使用して、最後のキーストロークからの経過時間を知ることができます。

+0

ありがとう、私は最後のキーストロークからどれくらいの時間を伝えるためにOnKeyPressとタイマーを使用しています。それは本当に動作します:) –

+0

それはうまく働いてうれしいです。幸せに助けてください: - D – David

0

これは、他の人が触れたように、あいまいな領域です。しかし、私はこれを行うに発見した最良の方法は、(どのように多くの不活動の秒あなたは彼らが行わタイピング考えるまで)

  1. あなたの「完了」ウィンドウとして指定されたミリ秒単位の設定可能な数を持っているだけである
  2. トラック"key up"イベント。
  3. は、あなたの非アクティブウィンドウとして長い間隔で発射するタイマーを持っており、その時にKeyUpイベントがなかった場合、あなたはあなたが伝えるためにOnLostFocusを使用することができますいずれか
5

TextBoxを拡張し、TextChangedイベントをリッスンしてタイマーを操作することで発生する新しいイベント "TextChangedComplete"を作成します。ここに完全なコードがあります。

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); 
    } 
}