2012-01-12 16 views
2

ユーザーがテキストボックスに3秒間何も入力していない場合、アクションを実行するためのコード例/アルゴリズムを探しています。イベントが3秒間そこに呼び出されたかどうかを知る方法?

私の風景:テキストボックスにフォーカスがあってもユーザーが3秒間何も書いていない場合は、投稿したいと考えているtextboxがあります。これは可能ですか?

これは明らかです。どんな助けもありがとうございました!

+3

テキストボックスにフォーカスがカウントされてから、3秒後に何か他の操作を行うと、それはあなたが求めていることですか? – Yuck

+0

winformsまたはwpfを使用していますか? – Morten

+0

@ Yuck:...ユーザーが3秒以内に何かをやり始めると、他のアクションをキャンセルすることを忘れないでください。 – Piskvor

答えて

2

System.Windows.Forms.Timerタイマーを設定する必要があります。テキストボックスのテキストが変わるたびに(TextChangedイベント)、タイマーを再起動して3秒以内に発射する必要があります。タイマーが起動すると、ユーザーが何も入力していない間に3秒が経過したことを意味します。

しかし、これはアプリケーションに代わって非常に奇妙な動作であり、そこにいるすべてのユーザーが高く評価することはほとんどありません。

3

TextChangeには、テキストボックスの変更のための変数に現在の時刻を格納する1つのイベントを含めることができます。

次に、毎秒発生するTimerを追加できます。タイマーは、テキストボックスにフォーカスがあるかどうかをチェックし、そうであれば、変数のタイムスタンプが3秒以上経過していれば(おそらくテキストボックスが空であるかどうか)、そうであればsubmitメソッドを呼び出します。

2

私は既成の例はありませんが、これを達成するためにTimerを使用できると思います。タイムアウトを3000ミリ秒に設定し、ユーザーがテキストボックスに入力したときにリセットします(TextChangedなどの同等のイベントを使用します)。ではなく、はKeyPressで、右クリックメニューのクリップボードペーストなどでは起動しません)タイマーを無効にして(繰り返し実行しないように)、好きなロジックを実行します。また、テキストボックスにフォーカスがあるかどうかに応じてタイマーを有効/無効にします。

1

ここでは、ユーザーがマウスを3秒間動かさないとカーソルを非表示にする例を示します。 TextChangeイベントを使用して同様の処理を行う必要があります。

private DispatcherTimer CursorTimer { get; set; } 
private DateTime CursorLastMoveTime { get; set; } 

void CursorTimer_Tick(object sender, EventArgs e) 
     { 
      TimeSpan delta = DateTime.Now.Subtract(this.CursorLastMoveTime); 
      if (delta.TotalSeconds > 3) 
      { 
       CursorTimer.Stop(); 
       Mouse.OverrideCursor = Cursors.None; 
      } 
     } 


private void Window_MouseMove(object sender, MouseEventArgs e) 
     { 
      #region Hide/Show cursor over the main window 
      Mouse.OverrideCursor = Cursors.Arrow; 
      CursorLastMoveTime = DateTime.Now; 
      if (CursorTimer.IsEnabled == false) 
       CursorTimer.Start(); 
      #endregion 
     } 
1

間隔が3000ミリ秒のタイマーを使用できます。間隔が経過すると、イベントがトリガされ、ユーザーがテキストボックスにテキストを入力すると、カウントがリセットされます。

public partial class Form1 : Form 
{ 
    System.Timers.Timer timer; 

    public Form1() 
    { 
     InitializeComponent(); 

     timer = new System.Timers.Timer(); 
     timer.Interval = 3000; 
     timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 

     textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress); 
     textBox1.GotFocus += new EventHandler(textBox1_GotFocus); 
     textBox1.LostFocus += new EventHandler(textBox1_LostFocus); 
    } 

    void textBox1_LostFocus(object sender, EventArgs e) 
    { 
     timer.Stop(); 
    } 

    void textBox1_GotFocus(object sender, EventArgs e) 
    { 
     timer.Start(); 
    } 

    void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     timer.Stop(); 
     timer.Start(); 
    } 

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     MessageBox.Show("You have not entered text in the last 3 seconds!"); 
    } 
} 
+0

他の人が述べたように、この例のようにKeyChressではなくTextChangedイベントを選択することをお勧めします。 – Andy0708

関連する問題